返回<T>带有参数的列表<S1>的方法 列表,列表<S2>,其中 S1 和 S2 扩展 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>

因此,您可以通过以下方式声明它:

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

最新更新