列表<?扩展 MyType>

2022-09-01 02:30:50

我有一个关于泛型的Java问题。我声明了一个通用列表:

List<? extends MyType> listOfMyType;

然后,在某种方法中,我尝试实例化并将项目添加到该列表中:

listOfMyType = new ArrayList<MyType>();
listOfMyType.add(myTypeInstance); 

其中只是一个类型的对象 ;它不会编译。它说:myTypeInstanceMyType

方法 add(capture#3-of ? 扩展 MyType) 在 List<capture#3-of ?扩展 MyType> 不适用于参数 (MyType)

有什么想法吗?


答案 1

您不能使用扩展执行“看跌”。查看泛型 - 获取和放置规则


答案 2

考虑:

class MySubType extends MyType {
}

List<MySubType> subtypeList = new ArrayList<MySubType>();
List<? extends MyType> list = subtypeList;
list.add(new MyType());
MySubType sub = subtypeList.get(0);

sub现在包含一个非常错误的。MyType