名单<?extends Object> #add(new MyClass())无法编译

sp0*_*00m 2 java generics extends

MyClass e = new MyClass();

List<Object> ok = new ArrayList<Object>();
List<? extends Object> ko = new ArrayList<Object>();

ok.add(e);
ko.add(e); // doesn't compile
Run Code Online (Sandbox Code Playgroud)

为什么不编译?MyClass不管是Object...... 的子类

有关信息,我收到以下消息:

The method add(capture#1-of ? extends Object) in the type List<capture#1-of ? extends Object> is not applicable for the arguments (MyClass)
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

这是你的问题:

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

这意味着"它是一个扩展Object的类型T的列表,但我不关心T是什么".

所以这是有效的:

List<? extends Object> ko = new ArrayList<Banana>();
Run Code Online (Sandbox Code Playgroud)

......但你不想要:

ko.add(e);
Run Code Online (Sandbox Code Playgroud)

在那时编译,不是吗?因为a MyClass不是Banana.

Java泛型常见问题解答很多的更多信息.