The method add(capture#2-of ? super Integer) in the type List<capture#2-of ? super Integer> is not applicable for the arguments (Number)
public static void down(List<? super Integer> numberList) {
Number x = 4;
numberList.add(x);
}
add方法报错
1 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
对于泛型,要求的是泛型参数一旦被确定就不能改变。<? super Integer>
表示泛型参数将是 Integer
或者其父类,所以你肯定可以用 <? super Integer>
来消费 Integer
或者其子类的对象。
但 Number
是 Integer
的父类 —— 我们假设继承关系为 C 继承 B,B 继承 A,而 A、B、C又各自实现了某些接口,那么对于 <? super C>
的泛型参数在运行时有许多可能的选择 —— 并且在你的代码这里(即将 List<? super C>
作为参数),编译期是肯定无法确定这个泛型参数的。所以,编译器干脆直接禁止你添加 C 的父类到泛型容器。
添加回答
举报
0/150
提交
取消