Java 方法返回一个列表<;T>;带参数列表<;S1>;,列表<;S2>;,其中S1和S2延伸T

Java 方法返回一个列表<;T>;带参数列表<;S1>;,列表<;S2>;,其中S1和S2延伸T,java,generics,inheritance,java-stream,Java,Generics,Inheritance,Java Stream,我有这个方法: public static <T> List<T> flat(List<T>... lists){ return Stream.of(lists) .filter(Objects::nonNull) .flatMap(List::stream) .collect(toList()); } 因为列表不是列表 有人知道如何用泛型写一个平面方法签名来承认我的意图吗 谢谢 如果A扩展C,B扩展C

我有这个方法:

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

有人知道如何用泛型写一个平面方法签名来承认我的意图吗


谢谢

如果
A
扩展
C
B
扩展
C
,那么
List
List
可分配给
列表
A
B
C
之间的关系是什么?@user7他提到A和B扩展cbtw而不是
流(列表)
您应该使用
Arrays.stream(list)
作为参考,这称为。@TimKlein。。。上界通配符使类型协变。
List<A> listOfA;
List<B> listOfB;
List<C> listOfC = flat(listOfA, listOfB);
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]
}