public static void main(String... args) {
List<Child> list1 = new ArrayList<Child>();
method2(list1);
}
public static void method2(List<Parent> list1) {
}
我得到以下编译错误
方法method2(List)未定义...
修改List<Parent> list1
为可以解决以上问题List<? extends Parent> list1
。
但是如果我尝试添加如下所示的子对象
public static void method2(List<? extends Parent> list1) {
Child child1 = new Child();
list1.add(child1);
}
再次给出编译错误
类型List中的方法add(capture#1-of?extended Parent)不适用于参数(Child)
所以我的问题是,是否List<Child>
可以将其作为参数传递给List<? extends Parent> list1
为什么我们不能在下面添加子对象List<? extends Parent>
?
这是一个非常普遍的误解。子女扩展父母的事实没有List<Child>
扩展List<Parent>
。在这种情况下听起来很不直观,但是确实如此。从Java教程中:
给定两个具体类型A和B(例如,Number和Integer),无论A和B是否相关,MyClass <A>与MyClass <B>没有关系。MyClass和MyClass的共同父对象是Object。
阅读这个详细信息。
至于添加到列表中,简短的答案是:假设您有另一个class Child2 extends Parent
列表,现在,您在处作为参数接收的列表method2(List<? extends Parent> list1)
可以是aList<Child1>
或a List<Child2>
。因此,考虑到第二种情况,添加Child1对象不是类型安全的。
现在,您不能添加的事实并不意味着您不能做其他有用的事情,例如获取大小等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句