我试图在更复杂的示例中理解 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<?>>
当我们将它放入另一个列表的泛型类型时,它不再是协变的吗?