我有3个简单的类如下:
public class ElementA {}
public class ElementB extends ElementA {}
public class ElementC extends ElementB {}
然后,如果我想创建,例如,只接受 ElementA 类的子类的泛型 List,我可以将其声明为:
List<? super ElementA> list = new ArrayList<>();
然后按如下方式使用它:
list.add(new ElementA());
list.add(new ElementB());
list.add(new ElementC());
这很好,可以毫无错误地编译。但是如果我想存储除 ElementC 或 ElementB 或 ElementA 之外的任何东西,我就会感到困惑。我声明这样的列表如下:
List<? extends ElementC> list = new ArrayList<>();
我根本不能使用它,因为它只能存储空值。当我将 List 声明为时也会发生同样的事情(请注意,我正在使用“在家庭中”的类):
List<? extends ElementB>
为什么这样?