如果我写:
List<List<String>> strings = new ArrayList<ArrayList<String>>();
我收到以下编译器错误:
Type mismatch: cannot convert from ArrayList<ArrayList<String>> to List<List<String>>
为什么?
你可以做你想要的代码,你只需要更新你的初始化:
List<List<String>> strings = new ArrayList<List<String>>();
然后,对于要添加到外部列表的每个项目:
strings.add(new ArrayList<String>());
如果允许这样做,您最终可能会在某一时刻依赖列表作为 ArrayList 的列表,同时在其他地方推入其他内容。
例如,这样做也是合法的:
ArrayList<ArrayList<String>> arrayLists = new ArrayList<ArrayList<String>>();
List<List<String>> unknownLists = arrayLists ;
unknownLists.append(new LinkedList<String>());
for (ArrayList<String> l : arrayLists ) // (1)
System.out.println(l);
这会编译得很好,但会在 (1) 处给您一个 ClassCastException。
你不能这样做,因为类型是坚持的。但是,您可以这样写:
List<? extends List<String>> strings = new ArrayList<ArrayList<String>>();