Java 返回集合字段警告设置器和构造函数

Java 返回集合字段警告设置器和构造函数,java,intellij-idea,collections,getter-setter,code-inspection,Java,Intellij Idea,Collections,Getter Setter,Code Inspection,IntelliJ警告我,如果我执行以下操作,“返回集合字段” private List<String> myList; public List<String> getMyList() { return myList; } 私有列表myList; 公共列表getMyList(){ 返回myList; } 代码检查说明如下: 报告从方法返回数组或集合字段的任何尝试。由于数组或集合的内容可能会被调用方法修改,因此此构造可能会导致对象的状态意外修改。虽然出于性能原因

IntelliJ警告我,如果我执行以下操作,“返回集合字段”

private List<String> myList;

public List<String> getMyList() {
    return myList;
}
私有列表myList;
公共列表getMyList(){
返回myList;
}
代码检查说明如下:

报告从方法返回数组或集合字段的任何尝试。由于数组或集合的内容可能会被调用方法修改,因此此构造可能会导致对象的状态意外修改。虽然出于性能原因,这种构造偶尔会有用,但它本身就容易出现错误

我完全理解这些问题,但我想知道为什么没有人提醒我对二传手和建设者也要这样做

public MyListClass (List<String> myList) {
    this.myList = myList;
}

public void setMyList (List<String> myList) {
    this.myList = myList;
}
publicMyListClass(列表myList){
this.myList=myList;
}
公共void setMyList(列表myList){
this.myList=myList;
}
我认为这会导致同样的问题

我不应该为获取和设置集合创建新集合吗?不仅如此

return new ArrayList<String>(this.myList);
返回新的ArrayList(this.myList);
而且

this.myList = new ArrayList<String>(myList);
this.myList=newarraylist(myList);

(忽略使返回列表不可修改或在本例中检查null)

我认为这只是为了促进标准编码实践

上面提到的警告将强制开发人员在类中拥有不可变的集合

您可以安全地忽略此警告,也可以禁止检查


您可以在此处阅读:

您可以使用参数检查中的
Java |分配问题|分配到集合或数组字段来获取设置器和构造函数中的警告

SetterXplicity接受在类外部创建的数据。getter可能不适当地公开了内部依赖项。但是,是的,它可能会导致同样类型的问题。