泛型方法与类型推断

一。好处

1.代替整个类泛型化

2.static方法无法访问泛型类的类型参数,所以static方法需要使用泛型能力,就必须使其成为泛型方法。

二。示例

只需将泛型参数列表置于返回值之前。

public class GenericMethods {  
  public void f(T x) {  
     System.out.println(x.getClass().getName()); 
 } 
  public static void main(String[] args) {
    GenericMethods gm = new GenericMethods();
    gm.f("");
    gm.f(1);
    gm.f(1.0F);
    gm.f(gm);
  }
}

结果:好像f()方法被无限重载过一样。

java.lang.String 
java.lang.Integer
java.lang.Float
GenericMethods

三。泛型与反射

public <T> T getInstance(Class<T> clazz) throws InstantiationException, IllegalAccessException{
        return clazz.newInstance();
    }

调用示例

getInstance(Class.forName("com.gl.User"));

forName

public static Class<?> forName(String className)
                        throws ClassNotFoundException

四。API示例

java.util.Arrays

public static <T> List<T> asList(T... a)

1.用法 

1 //  List<Shape> shapes = Arrays.asList(new Rect(),new Square());//编译期出错。 数组与泛型容器的区别:数组有协变类型,而泛型容器没有内建协变类型
2     List<Rect> rects = Arrays.asList(new Rect(),new Square());
3     List<Shape> rects1 = Arrays.<Shape>asList(new Rect(),new Square()); //显示类型参数说明
4     
5     List<Rect> rects2 = new ArrayList<Rect>();
6     Collections.addAll(rects2, new Rect(),new Square());

类继承

class Shape{
    void draw(){
        System.out.println(this+".draw()");
    }
}

class Circle extends Shape{
    @Override
    public String toString() {
        return "Circle";
    }
}
class Rect extends Shape{
    @Override
    public String toString() {
        return "Rect";
    }
}

class Triangle extends Shape{
    @Override
    public String toString() {
        return "Triangle";
    }
}

class Square extends Rect{
    @Override
    public String toString() {
        return "Square";
    }
}
原文地址:https://www.cnblogs.com/yuyutianxia/p/3836623.html