收集字段警告的返回 - Setters和Constructors

时间:2016-08-05 07:03:59

标签: java intellij-idea collections getter-setter code-inspection

如果我做

之类的事情,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)

2 个答案:

答案 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和构造函数中的警告。