如果我在MyClass
中有一个方法,例如
setSuperClassList(List<Superclass>)
......我应该能够做到这一点:
new MyClass().setSuperClassList(new ArrayList<Subclass>())
看来这不会编译。为什么呢?
答案 0 :(得分:21)
尝试setSuperClassList(List<? extends Superclass>)
。
同时检查PECS,看看您是否应该使用? extends
或? super
。
答案 1 :(得分:5)
你只是在做仿制药有点不对劲。添加? extends
位,这将允许传入的列表包含SuperClass或其任何子类。
setSuperClassList(List<? extends Superclass>)
这称为设置泛型的上限。
声明List<Superclass>
表示列表只能包含SuperClass
。这排除了任何子类。
答案 2 :(得分:1)
由于java.util.List
不是covariant,因此无法编译。
请尝试setSuperClassList(List<? extends Superclass>)
。
答案 3 :(得分:0)
执行:
setSuperClassList(List<? extends Superclass> list)
这将允许超类的任何子类的列表。