繁体   English   中英

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

现在,当我打印列表时,它也包含双精度值, 但该列表仅应容纳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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM