Java中 ? extends T 和 ? super T 的理解
有关extends和super的理解
class Food{}
class Fruit extends Food{}
class Apple extends Fruit{}
public void test() {
//表示只知道元素是Fruit子类,但不知道是那个子类,所以不允许任何继承于Fruit的子类存入该集合
//但是允许从该集合中获取元素,获取的元素可以向上转型为Furnit
List<? extends Fruit> fruits = new ArrayList<>();
Fruit fruit = fruits.get(0);
//表示只知道元素是Fruit或Fruit的基类(父类),但是不知道元素是Fruit的那个超类,所以不允许存Fruit的任何超类,
//既然元素是Fruit的基类,那往里存粒度比Fruit小的都可以,所以可以往里面存Fruit及其子类
List<? super Fruit> fruits2= new ArrayList<>();
fruits2.add(new Fruit());
fruits2.add(new Apple());
}