在以下代码段中,它在第2行给出了编译错误,但在第3行却没有。
List<? extends Object> list1 = new ArrayList<>(); // line 1
list1.add("123"); // line 2
List<? extends Object> list2 = Arrays.asList("123", new Integer(12)); // line 3
如果语言设计师已决定,不允许将元素添加到元素类型<? extends T>
的集合中,那么它也应适用于第3行。
造成这种差异的原因是什么?
请澄清。
答案 0 :(得分:6)
您正在add(?)
上呼叫List<?>
。
由于编译器不知道?
是什么,因此您无法传递任何可能的值(null
除外),该值对每种可能的?
都是合法的
您的第二个示例未调用任何以?
作为参数的方法,因此它并不安全。