​https://www.jianshu.com/p/e5b8cd33ec94​

​https://www.jianshu.com/p/f25da582f592​

PECS原则:

简单的说,当只想从集合中获取元素,请把这个集合看成生产者,请使用<? extends T>,从这个集合取get()方法

这就是Producer extends原则,PECS原则中的PE部分。



List<Child> childList = new ArrayList<>();
childList.add(new Child());
List<? extends Parent> parents = childList;
parents.forEach(System.out::println);

Parent parent = parents.get(0); // 可行,
// parents.add(new Child());
// parents.add(new Child2());
// parents.add(new Parent()); // 均编译报错,用了<? extends Fruit>相当于告诉编译器,
// 我们的篮子(集合)是用来处理父类以及父类的子类型。因为子类型有许多,我们并没有告诉编译器是哪个子类型。
// 编译器在这里遇到的问题是,如果add的是Apple类型时,则basket应该是List<Apple>,
// 如果add是Fruit类型,则basket应该是List<Fruit>。而List<Apple>和List<Fruit>前面已经提过,是2个完全没有关系的类型,


java基础知识