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]
}