我有一个Java类,其中包含继承自MyClass的对象子项。
class MyClass {
List<? extends MyClass> items;
[...]
出于某种原因,我无法将MyClass项插入到此列表中。我不明白为什么,也不知道如何解决这个问题。例如:
void foo(){
items = new LinkedList<MyClass>(); // This is OK
items.add(new MyClass()); // Not allowed... why?
}
编译器说:“List中的add(capture#1-of ? extends MyClass)方法不适用于参数(MyClass)”
我真的不明白如何绕过这个问题,为什么编译器只接受必须扩展MyClass类型。
注意:为什么需要使用这种方法?因为我需要允许扩展MyClass以拥有子项的列表。
Myclass
而不是MyClass
? - user202729? extends
部分实际上是不需要的:List<MyClass> 将接受任何类型为 MyClass 或从 MyClass 继承的任何类的实例... - moilejter<? extends MyClass>
的含义是“某个继承自MyClass的类,或者就是MyClass本身” - 但是在这种类型中没有足够的信息让编译器知道你想使用哪个MyClass的子类型... - moilejter