为了账号安全,请及时绑定邮箱和手机立即绑定

为什么该行代码中无法在下届通配符中存入父类?

为什么该行代码中无法在下届通配符中存入父类?

倚天杖 2019-01-19 02:11:46
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 或者其子类的对象。
NumberInteger 的父类 —— 我们假设继承关系为 C 继承 B,B 继承 A,而 A、B、C又各自实现了某些接口,那么对于 <? super C> 的泛型参数在运行时有许多可能的选择 —— 并且在你的代码这里(即将 List<? super C> 作为参数),编译期是肯定无法确定这个泛型参数的。所以,编译器干脆直接禁止你添加 C 的父类到泛型容器。

查看完整回答
反对 回复 2019-02-12
  • 1 回答
  • 0 关注
  • 422 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信