public class Food {
}
public class Fruit extends Food {
}
public class Apple extends Fruit {
}
ArrayList<? super Fruit> arrayList = new ArrayList<>();
arrayList.add(new Apple()); //正常
arrayList.add(new Fruit()); //正常
arrayList.add(new Food()); //报错
为什么报错?
我产生这个问题的原因是这个:
static void set(Pair<? super Integer> p,Integer first,Integer last){
p.setFirst(first);
p.setLast(last);
}
public static void main(String[] args) {
PairHelp.set(new Pair<Integer>(1,2),1,2);
PairHelp.set(new Pair<Number>(1,2),1,2); //我觉得这个应该也不可以,但是实际上可以
}
这两者有什么区别?
? super Fruit:可以是Fruit或者是Fruit的父类,但是父类并无法确定是什么类型,但可以确定Fruit的子类肯定是Fruit类型,所以只能add Fruit和它的子类