Java 泛型:使用子类列表设置超类列表
如果我在 MyClass
中有一个方法,例如
setSuperClassList(List<Superclass>)
......我应该能够这样做:
new MyClass().setSuperClassList(new ArrayList<Subclass>())
看起来这不会编译。为什么?
If I have a method in MyClass
such as
setSuperClassList(List<Superclass>)
...should I be able to do this:
new MyClass().setSuperClassList(new ArrayList<Subclass>())
It appears this won't compile. Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
尝试
setSuperClassList(List)
。另请检查 PECS 以了解是否应该使用
?扩展
还是?超级。
Try
setSuperClassList(List<? extends Superclass>)
.Also check PECS to see wether you should use
? extends
or? super
.您只是在泛型方面做得有点错误。添加<代码>? extends 位,这将允许传入的列表包含超类或其任何子类。
这称为设置泛型上限。
List
语句表示 List 只能包含SuperClass
。这不包括任何子类。You are just doing the generics a bit wrong. Add the
? extends
bit, and that will allow the passed in list to contain the SuperClass or any of its subclasses.This is called setting an upper bound on the generics.
The statement
List<Superclass>
says that the List can only containSuperClass
. This excludes any subclasses.它不会编译,因为
java.util.List
不是 协变。请尝试使用
setSuperClassList(List)
代替。It won't compile since
java.util.List
is not covariant.Try
setSuperClassList(List<? extends Superclass>)
instead.做:
这将允许超类的任何子类的列表。
Do:
This will allow a list of any subclass of Superclass.