java如果您想让列表包含单个父类的各种子类,您会如何做?
你应该使用
List<ParentClass> foo = new ArrayList<ParentClass>
foo.add(ChildClassObject)
或
List<? extends ParentClass> bar - new ArrayList<ParentClass>
bar.add(ChildClassObject)
还有,有人能给我解释一下列表的后一种参数化吗
你可以在下面搜索框中键入要查询的问题!
你应该使用
List<ParentClass> foo = new ArrayList<ParentClass>
foo.add(ChildClassObject)
或
List<? extends ParentClass> bar - new ArrayList<ParentClass>
bar.add(ChildClassObject)
还有,有人能给我解释一下列表的后一种参数化吗
# 1 楼答案
使用第一种方法。第二个不允许添加任何元素。这是因为第二种方法使用了扩展
ParentClass
的未知类型,无法确保要存储的元素来自此类型更多信息:
# 2 楼答案
List<? extends ParentClass>
是ParentClass
的一些特定亚型的列表。因为它不知道具体的子类型是什么,所以编译器不允许您向它添加任何对象对于初学者来说,很容易将其与
ParentClass
的任何子类型相混淆,并想知道为什么他们不能添加子类型的实例例如,假设您有以下类层次结构-
现在,如果你宣布一份清单如下-
这意味着
l
是P
的某些特定子类型的列表,可以是A
或B
(甚至是P
本身),但编译器不知道具体是哪一个。因此,您不能向它添加任何内容,因为您可能正在将B
的实例添加到A
的列表中,从而造成一些堆污染当您只想将列表中的元素作为
P
的实例读取时,可以声明这样一个列表