0

我试图在更复杂的示例中理解 Java 泛型和 UpperBound 通配符。

我有一个扩展任何类型对象列表的任何列表的列表:

List<List<? extends List<?>>> veryNestedList;

我在想我的第一个嵌套列表是否真的可以接受 ArrayList 的任何实现。

在我看来:

List<? extends ArrayList<?>> 

应该是子类型:

List<? extends List<?>>

所以我尝试过这样的方式:

List<List<? extends List<?>>> veryNestedList = new ArrayList<List<? extends ArrayList<?>>>();

不幸的是,这不起作用。

我需要做的是:

List<? extends List<? extends List<?>>> veryNestedList = new ArrayList<List<? extends ArrayList<?>>>();

我不确定这是什么原因。

@Edit 现在当我看到这个时:

是不是因为即使

 List<? extends ArrayList<?>> 

是子类型

 List<? extends List<?>>

当我们将它放入另一个列表的泛型类型时,它不再是协变的吗?

4

0 回答 0