Java 泛型 <? extends T>和<? super T> 详解
大概来讲: <? extends T>是"上界通配符" <? super T> 是"下界通配符" 1. 为什么要用通配符和边界? 使用泛型的过程中,经常出现一种很别扭的情况。比如按照题主的例子,我们有Fruit类,和它的派生类Apple类。 public class Apple extends Fruit{ } public class Fruit { } 然后我在main方法里创建实例对象: image.png 逻辑上水果盘子当然可以装苹果,但实际上Java编译器不允许这个操作。会报错,“装苹果的盘子”无法转换成“装水果的盘子”。 Error:(9, 30) java: 不兼容的类型: com.generic.Plate<com.generic.Apple>无法转换为com.generic.Plate<com.generic.Fruit> 所以,就算容器里装的东西之间有继承关系,但容器之间是没有继承关系的。所以我们不可以把Plate<Apple>的引用传递给Plate<Fruit>. 为了让泛型用起来更舒服,Su...