下界通配符方法

时间:2020-10-08 17:16:27

标签: java generics collections

任何人都可以让我理解为什么这段代码会出现编译器错误:

List<? super A> superList = new ArrayList<>();
superList.add(new Object());

这是完全正确的:

setSuper(new ArrayList<Object>());

public void superMethod(List<? super A> list) {
    //...
}

我知道下限将可用类型缩小为A或它们的后代,但是为什么在方法参数方面对编译器来说这很好呢?

1 个答案:

答案 0 :(得分:0)

ArrayList<Object>是类型List<? super A>的有效值。

ArrayList<A>也是 类型为List<? super A>的有效值。

但是您不能将new Object()添加到ArrayList<A>中。因此,并非所有List<? super A>值都可以添加对象,因此编译器会正确地出错。

相关问题