簡體   English   中英

返回具有上限的通用列表

[英]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>不是互斥范圍; StringCharSequence符合。

請注意,即使某些類符合一個約束但不符合另一個約束(例如, ObjectString但不擴展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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM