在下面的代码片段中,它给出了第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
Run Code Online (Sandbox Code Playgroud)
如果语言设计者决定不允许将元素添加到元素类型的集合中,<? extends T>那么它也应该适用于第3行.
造成这种差异的原因是什么?
请澄清.
你正在呼唤add(?)一个List<?>.
由于编译器不知道它?是什么,因此没有可能的值(除了null),你可以传递,保证每个可能的合法?.
您的第二个示例不会调用任何将?参数作为参数的方法,因此它不是不安全的.
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |