java 中的下界通配符

Lower bounded wildcards in java

考虑以下示例,

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());

现在,当我打印列表时,它也包含双精度值但是列表应该只包含整数和大于整数的任何值

如果上面没问题,那么下面的不应该编译吗?

list.add(30.30);

如果您考虑可以分配给它的可能事物,一切都有意义。

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,因此它不会编译。