考虑以下示例,
List<? super Number> list1 = new ArrayList<>();
list1.add(10);
list1.add(10.10);
list1.add(20.20d);
以及我指定 list1
的另一个列表List<? super Integer> list = list1;
System.out.println(list.toString());
现在,当我打印列表时,它包含双重值但是该列表只能保存Integer和Integer 之外的任何内容。
如果以上情况还可以,那么下面的编译也不应该?
list.add(30.30);
答案 0 :(得分:5)
如果您考虑可以分配给它的可能事项,那么一切都有意义。
List<? super Number> list1 = new ArrayList<Object>(); // works
List<? super Number> list1 = new ArrayList<Number>(); // works
List<? super Number> list1 = new ArrayList<Integer>(); // doesn't work
右侧有效的任何内容都会接受Double
。
List<? super Integer> list = new ArrayList<Object>(); // works
List<? super Integer> list = new ArrayList<Number>(); // works
List<? super Integer> list = new ArrayList<Integer>(); // works
您可以分配给list1
的任何内容,您也可以分配给list
。所以list = list1
工作正常。但不您可以分配给list
的所有内容都会接受Double
,因此无法编译。