如果我做
之类的事情,IntelliJ会向我发出关于“归还收集字段”的警告private List<String> myList;
public List<String> getMyList() {
return myList;
}
代码检查状态的描述:
报告从方法返回数组或Collection字段的任何尝试。由于数组或集合可能通过调用方法修改其内容,因此该构造可能导致对象的状态被意外修改。虽然偶然因性能原因而有用,但这种结构本质上容易出错。
我完全理解这些问题,但我想知道为什么我没有被警告过对设置者和构造者做同样的事情
public MyListClass (List<String> myList) {
this.myList = myList;
}
public void setMyList (List<String> myList) {
this.myList = myList;
}
我认为可能导致同样的问题。
我不应该为获取和设置Collection创建新的集合吗?所以不仅
return new ArrayList<String>(this.myList);
但也
this.myList = new ArrayList<String>(myList);
(忽略使返回的列表不可修改或在此示例中检查为null)
答案 0 :(得分:2)
我认为这只是为了促进标准编码实践。
上面提到的警告会强制开发人员在类中包含不可变的集合。
您可以放心地忽略此警告,也可以禁止检查。
您可以在此处阅读:https://www.jetbrains.com/help/idea/2016.2/suppressing-inspections.html
答案 1 :(得分:1)
您也可以使用Java | Assignment issues | Assignment to Collection or array field from parameter
检查来获取setter和构造函数中的警告。