[英]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());
现在,当我打印列表时,它也包含双精度值, 但该列表仅应容纳Integer以及Integer以上的任何内容 。
如果以上方法都可以,那么下面的代码是否也应该编译?
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
,因此它不会编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.