任何人都可以让我理解为什么这段代码会出现编译器错误:
List<? super A> superList = new ArrayList<>();
superList.add(new Object());
这是完全正确的:
setSuper(new ArrayList<Object>());
public void superMethod(List<? super A> list) {
//...
}
我知道下限将可用类型缩小为A或它们的后代,但是为什么在方法参数方面对编译器来说这很好呢?
答案 0 :(得分:0)
ArrayList<Object>
是类型List<? super A>
的有效值。
ArrayList<A>
也是 类型为List<? super A>
的有效值。
但是您不能将new Object()
添加到ArrayList<A>
中。因此,并非所有List<? super A>
值都可以添加对象,因此编译器会正确地出错。