【发布时间】:2011-01-31 10:50:33
【问题描述】:
如果我在MyClass 有方法比如
setSuperClassList(List<Superclass>)
...我能做到吗:
new MyClass().setSuperClassList(new ArrayList<Subclass>())
这似乎无法编译。为什么?
【问题讨论】:
标签: java generics class hierarchy
如果我在MyClass 有方法比如
setSuperClassList(List<Superclass>)
...我能做到吗:
new MyClass().setSuperClassList(new ArrayList<Subclass>())
这似乎无法编译。为什么?
【问题讨论】:
标签: java generics class hierarchy
试试setSuperClassList(List<? extends Superclass>)。
同时检查PECS,看看你应该使用? extends还是? super。
【讨论】:
你只是在做泛型有点错误。添加? extends 位,这将允许传入的列表包含超类或其任何子类。
setSuperClassList(List<? extends Superclass>)
这称为设置泛型的上限。
声明List<Superclass> 表示列表只能包含SuperClass。这不包括任何子类。
【讨论】:
由于java.util.List 不是covariant,因此无法编译。
改用setSuperClassList(List<? extends Superclass>)。
【讨论】:
做:
setSuperClassList(List<? extends Superclass> list)
这将允许列出超类的任何子类。
【讨论】: