Pra*_*uja 6 java generics null generic-list readonly-collection
在下面的代码Java中,我创建了一个列表nums.我可以在声明期间分配另一个列表.但是除了null.之外不能添加新项目.那么,这是否意味着nums只读?为什么?是否可以在该列表中添加新项目?
List<Integer> ints = new ArrayList<Integer>();
ints.add(1);
ints.add(2);
List<? extends Number> nums = ints;
nums.add(3.14); //Generates error
nums.addAll(ints); //Generates error
nums.add(null); //works
System.out.println(nums.get(0)); //works
Run Code Online (Sandbox Code Playgroud)
我已经通过了这个链接.我无法得到确切的理由.
是否可以在该列表中添加新项目?
不......因为那段代码不知道它是什么"实际"的列表.想象一下,如果你能:
List<String> strings = new ArrayList<>();
List<? extends Object> objects = strings; // This is fine
objects.add(new Object()); // Fortunately this *isn't* valid...
System.out.println(strings.get(0).length()); // Or what would this do?
Run Code Online (Sandbox Code Playgroud)
基本上,当您使用通配符像? extends T你只能得到值了通过API ...当你使用通配符一样? super T,你只能把这些值在通过API -因为这是很安全的.