don*_*nea 4 java generics inheritance extends
我有一个Java类,其中包含扩展MyClass的Objects子项.
class MyClass {
List<? extends MyClass> items;
[...]
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我无法将MyClass项插入此列表.我不明白为什么,以及如何绕过这个问题.例如:
void foo(){
items = new LinkedList<MyClass>(); // This is OK
items.add(new MyClass()); // Not allowed... why?
}
Run Code Online (Sandbox Code Playgroud)
编译器说" 类型List中的方法add(capture#1-of?extends MyClass)不适用于参数(MyClass)"
我真的不明白如何绕过这个问题,以及为什么编译器应该只接受一个必须扩展MyClass的类型.
注意:为什么我需要使用这种方法?因为我需要允许MyClass的扩展包含子项列表.
List<? extends MyClass> items表示类型参数是可分配的未知类型MyClass.
例如,它可能是一个List的MySubClass:
public MySubClass extends MyClass{}
List<? extends MyClass> items = new ArrayList<MySubClass>();
Run Code Online (Sandbox Code Playgroud)
现在考虑你也MyAnotherSubClass从哪个延伸MyClass:
public MyAnotherSubClass extends MyClass{}
MyClass item = new MyAnotherSubClass(); // refer it using MyClass
Run Code Online (Sandbox Code Playgroud)
显然,List<MySubClass> 不应该被允许包含MyAnotherSubClass:
items.add(item); // compile error
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |