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)
这是你的问题:
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泛型常见问题解答了很多的更多信息.