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

Dre*_*son 8 java generics class hierarchy

如果我有一个方法MyClass,如

setSuperClassList(List<Superclass>)
Run Code Online (Sandbox Code Playgroud)

......我应该能够这样做:

new MyClass().setSuperClassList(new ArrayList<Subclass>())
Run Code Online (Sandbox Code Playgroud)

看来这不会编译.为什么?

Tho*_*zer 22

试试setSuperClassList(List<? extends Superclass>).

还要检查PECS,看看是否应该使用? extends? super.


jjn*_*guy 6

你只是在做泛型有点不对劲.添加该? extends位,这将允许传入的列表包含SuperClass或其任何子类.

setSuperClassList(List<? extends Superclass>)
Run Code Online (Sandbox Code Playgroud)

这称为设置泛型的上限.

声明List<Superclass>说List只能包含SuperClass.这排除了任何子类.