我试图通过更复杂的例子来理解Java Generics和UpperBound Wildcards。
我有一个扩展任何类型对象列表的任何列表的列表:
List<List<? extends List<?>>> veryNestedList;
我在想是否第一个嵌套List实际上可以接受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<?>>
当我们将它放入另一个列表的泛型类型时,它不再是协变的吗?