我有这种方法:
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>
!
任何人都知道如何使用泛型来写一个平面方法签名,该签名承认我想做的事情吗?
谢谢!
答案 0 :(得分:8)
如果A
扩展了C
,B
扩展了C
,则List<A>
和List<B>
可分配给List<? extends C>
。 / p>
所以您可以这样声明:
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]
}