パラメータS1及びS2は、Tを拡張リスト<S1>、リスト<S2>でリスト<T>を返す方法

italktothewind:

私はこの方法があります:

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

アイデアはフラットにリストのリストであり、同じタイプのリストを返します。

それを仮定AしてB拡張しますCこれは動作しません:

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

ためList<A>ではありませんList<C>

誰もが私が何をしようとしている認めているジェネリック医薬品とフラットなメソッドシグネチャを作成する方法を知っていますか?

ありがとう!

xingbin:

場合はA拡張しCB拡張しCた後、List<A>およびList<B>に割り当てています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]
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=197570&siteId=1