3 回答
TA贡献1860条经验 获得超9个赞
您应该针对接口工作并删除具体的实现细节。在您的示例中,请改用对的引用List<List<Integer>,因为您可以向其添加任何List实现,包括您的ArrayList.
public List<List<Integer>> returnList(){
List<List<Integer>> currentList = new ArrayList<>();
List<Integer> innerList = new ArrayList<>();
innerList.add(123);
currentList.add(innerList);
return currentList;
}
如果您需要返回一个 new List,只需将其包装成另一个:
return new ArrayList<>(currentList);
或者,使返回的List不可修改:
return Collections.unmodifiableList(currentList);
编辑
如果你真的坚持使用,ArrayList你可以将它转换为Listwith
return (List) currentArrayList;
此强制转换会引发编译器警告,但您可以忽略它,@SuppressWarnings("unchecked")因为您知道返回了正确的类型。
TA贡献1909条经验 获得超7个赞
只需像这样更改声明类型,因为ArrayListextends from AbstractListwhich implements List:
List<List<Integer>> returnList(){
List<List<Integer>> currentArrayList = new ArrayList<>();
List<Integer> innerList = new ArrayList<>();
innerList.add(new Integer(123));
currentArrayList.add(innerList);
return currentArrayList;
}
TA贡献1883条经验 获得超3个赞
正如其他人提到的,编程到接口。
您的单线解决方案是:
List<List<Integer>> newList = Collections.unmodifiableList(currentArrayList);
但这有一个明显的缺点:
你不能向它添加新元素。
如果你考虑一下,这是有道理的。
虽然你可以添加LinkedList<Integer>
到List<List<Integer>>
,你不能添加LinkedList<Integer>
到List<ArrayList<Integer>>
。
如果您需要修改列表的能力,那么您可以创建一个新列表:
List<List<Integer>> newList = new ArrayList<>(currentArrayList);
这意味着复制外部列表。
最后一个解决方案您不应该采用,并且正在使用原始类型:
List<List<Integer>> newList = (List) currentArrayList;
虽然这会编译,但如果有人将例如 a 添加LinkedList<Integer>
到该列表中,它可能会在稍后中断,而您仍然希望该列表中的每个元素都是一个ArrayList<Integer>
添加回答
举报