extends(上界)、super(下界)在泛型中的使用,并非如其意
1,在类的定义中,
<? super Type> 无法在类的声明处使用
public class HasF {
public void f(){
System.out.println("HasF.f() ");
}
}
class Manipulator<T>{ class Manipulator<T extends HasF>{
private T o; .......
public Manipulator(T o){
this.o = o;
}
public void manipulate(){
//o.f(); T没有限定边界
}
} }
2,实例声明中, <? extends Type> 无法使用任何带有泛型的方法
<? super Type> 可以使用任意的方法
class Fruit{}
class Apple extends Fruit{}
class Jonathan extends Apple{}
class Orange extends Fruit{}
public class CovarianArrays {
public static void main(String[] args) {
//使用Arrays.asList 可以对extList 进行初始化
List<? extends Fruit> extList = new ArrayList<Fruit>();
//extList.add(new Apple());
//extList.add(new Fruit());
extList.contains(new Apple());
List<? super Fruit> supList = new ArrayList<Fruit>();
supList.add(new Apple());
supList.add(new Fruit());
System.out.println(supList.contains(new Apple()));
}
}
3,方法参数中同2
public static void writeTo(List<? super Apple> apples){
apples.add(new Apple());
apples.add(new Jonathan());
//apples.add(new Fruit());
}
public static void writeTo2(List<? extends Apple> apples){
//apples.add(new Apple());
//apples.add(new Jonathan());
apples.contains(new Apple());
apples.get(0);
}