泛型和继承?

萨克斯
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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章