的IntelliJ提醒我關於「集合場歸來」如果我這樣做返回集合場的警告 - 制定者和建設者
private List<String> myList;
public List<String> getMyList() {
return myList;
}
代碼檢查的說明指出:
報告任何嘗試從方法返回數組或集合字段。由於數組或集合可能會通過調用方法修改其內容,因此此構造可能導致對象的狀態被意外修改。雖然偶爾出於性能原因有用,但這種構造本身就是容易出錯的。
我完全理解的問題,但我不知道爲什麼我沒有警告過做同樣的制定者和建設者
public MyListClass (List<String> myList) {
this.myList = myList;
}
public void setMyList (List<String> myList) {
this.myList = myList;
}
,我認爲可能會導致同樣的問題。
不應該爲獲取和設置集合創建新的集合嗎?因此,不僅
return new ArrayList<String>(this.myList);
而且
this.myList = new ArrayList<String>(myList);
(忽略使返回列表不可修改或在本例中檢查空)
setter *顯式*接受在類之外創建的數據。 getter *可能會不適當地暴露內部依賴關係。但是,是的,這可能會導致相同類型的問題。 –