[英]Returning a generic List with an upper bound
我的問題是這篇文章的擴展。
如果我有這樣的方法:
public static <E extends CharSequence, T extends E> List<T> doIt(List<E> nums) {
return null;
}
為什么要編譯此代碼? 為什么超級字符串與T兼容擴展了CharSequence
public static void main(String[] args) {
List<CharSequence> in = new ArrayList<>();
List<? super String> result = new ArrayList<>();
result = doIt(in);
}
該代碼有效,因為<? super String>
<? super String>
和<? extends CharSequence>
<? extends CharSequence>
不是互斥范圍; String
和CharSequence
符合。
請注意,即使某些類符合一個約束但不符合另一個約束(例如, Object
為String
但不擴展CharSequence
),只要兩個約束的交集都不為空,它就可以工作。
相反,這是行不通的:
import java.util.*;
class Test {
public static <E extends CharSequence, T extends E> doIt(List<E> in) {
return null;
}
public static void main(String[] args) {
final List<CharSequence> in = new ArrayList<>();
final List<? super Integer> out = doIt(in);
}
}
因為CharSequence
不是Integer
CharSequence
,所以沒有類可以同時滿足這兩個范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.