簡體   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