泛型变量 T
只能在类、接口、方法中声明后才能使用,例如:
public class Box<T>{
public T get(){...}
}
无界通配符 ?
只能用于填充泛型变量T,表示通配任何类型。注意,是用来填充泛型变量T的,属于填充方式的一种。例如:
Box<?> box;
box = new Box<String>();
---------------------------
Box<String> boxString;
Java编程思想第四版 P393-397
? | extends | 能取,不能存 | 即上转型是安全的 下转型是不安全的 |
super | 能存,不能取 |
extends
void method(List<? extends T> holder, T arg){
holder.add(arg) //error
T t = holder.get();
}
super
void method(List<? super T> holder, T arg){
holder.add(arg)
T t = holder.get(); //error
}