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>
添加回答
舉報