Java 填充包含<;类型元素的集合时,为什么会出现行为差异;?扩展T>;?
在下面的代码段中,它在第2行给出了编译错误,但在第3行没有给出Java 填充包含<;类型元素的集合时,为什么会出现行为差异;?扩展T>;?,java,generics,jls,Java,Generics,Jls,在下面的代码段中,它在第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 List您正在调用列表上的添加(?) 由于编译器不知道?是什
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
List您正在调用列表上的添加(?)
由于编译器不知道?
是什么,因此没有任何可能的值(除了null
)可以传递,而该值保证对所有可能的?
都是合法的
第二个示例没有调用任何将?
作为参数的方法,因此它不是不安全的。您正在调用列表上的添加(?)
由于编译器不知道?
是什么,因此没有任何可能的值(除了null
)可以传递,而该值保证对所有可能的?
都是合法的
您的第二个示例没有调用任何将?
作为参数的方法,因此它不是不安全的。列表2初始化后,您不会将其添加到相关的列表中:。将代码更改为列表1=new ArrayList()代码>,然后添加任何您喜欢的内容。初始化列表2后,您将不会向其添加相关内容:。将代码更改为List list1=new ArrayList()代码>,然后添加您喜欢的内容。