Java Generics:使用List of subclass设置超类列表

时间:2010-03-24 20:22:45

标签: java generics class hierarchy

如果我在MyClass中有一个方法,例如

setSuperClassList(List<Superclass>)

......我应该能够做到这一点:

new MyClass().setSuperClassList(new ArrayList<Subclass>())

看来这不会编译。为什么呢?

4 个答案:

答案 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)

这将允许超类的任何子类的列表。