簡體   English   中英

返回List的方法 <T> 帶參數列表 <S1> ,列表 <S2> ,其中S1和S2延伸T.

[英]Method returning a List<T> with parameters List<S1>, List<S2>, where S1 and S2 extends T

我有這個方法:

public static <T> List<T> flat(List<T>... lists){
    return Stream.of(lists)
        .filter(Objects::nonNull)
        .flatMap(List::stream)
        .collect(toList());
}

我們的想法是平放列表列表並返回相同類型的列表。

假設AB擴展C 這不起作用:

List<A> listOfA;
List<B> listOfB;
List<C> listOfC = flat(listOfA, listOfB);

因為List<A>不是List<C>

任何人都知道如何使用泛型來編寫平面方法簽名,承認我正在嘗試做什么?

謝謝!

如果A擴展CB擴展C ,則List<A>List<B>可分配給List<? extends C> List<? extends C>

所以你可以這樣聲明:

public static <T> List<T> flat(List<? extends T>... lists)

測試:

public static void main(String[] args) {
    List<String> listOfString = List.of("sss"); // String extends from Object
    List<Integer> listOfInt = List.of(1); // Integer extends from Object
    List<Object> list = flat(listOfString, listOfInt);
    System.out.println(list); // [sss, 1]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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