最近写程序时候又碰到泛型,就又重新学习一遍,就做一下总结,也加深一下印象。
1.
class A<T> {
public T fun(T t1) {}
}
这种方法不是泛型方法!它是泛型类中的一个方法!
public <T> T fun(T t1) {} 这种才是泛型方法
2.泛型可以在类中或方法中使用的途径
class A<T> {
private T bean;//泛型可在成员变量上使用
public T fun(T t) {}//泛型可以在类中的方法上(返回值和参数类型)使用!
private T bean;//泛型可在成员变量上使用
public T fun(T t) {}//泛型可以在类中的方法上(返回值和参数类型)使用!
public void fun2() {//泛型还可以在局部变量的引用类型上使用
T b = ...
new T();//不行的!不可以在局部创建新对象
}
}
T b = ...
new T();//不行的!不可以在局部创建新对象
}
}
3.通配符的使用
boolean addAll(Collection<E> c)
List<Number> numList = new ArrayList<Number>();
List<Integer> intList = new ArrayList<Integer>();
numList.addAll(intList);//addAll(Collection<Number> c), 传递的是List<Integer>
List<Integer> intList = new ArrayList<Integer>();
numList.addAll(intList);//addAll(Collection<Number> c), 传递的是List<Integer>
boolean addAll(Collection<? extends E> c)
List<Number> numList = new ArrayList<Number>();
List<Integer> intList = new ArrayList<Integer>();
numList.addAll(intList);//addAll(Collection<? extends Number> c), 传递的是List<Integer>
List<Integer> intList = new ArrayList<Integer>();
numList.addAll(intList);//addAll(Collection<? extends Number> c), 传递的是List<Integer>
通配符可以 使方法更加通用,增加方法的重用性,但是也会使变量很多方法不可以使用,在使用过程要做取舍