[英]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.