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);}
