【发布时间】:2013-10-11 16:00:04
【问题描述】:
我有 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>
为什么会这样?
【问题讨论】:
-
你为什么希望
List<? extends ElementC> list = new ArrayList<>();存储任何东西,你没有任何扩展 ElementC 的类? -
请阅读我的问题的结尾。即使使用 Object 类,我也尝试过,但 List 仍然只能存储空值
-
List <? extends Object> list = new ArrayList <>();?您应该使用如下元素初始化您的列表:List<? extends ElementB> list = new ArrayList<ElementC>(); -
Java 7 不需要这个。
-
This 几乎涵盖了它。
标签: java oop generics object polymorphism