gpt4 book ai didi

java - Sonar - 存储副本 - 不应直接存储或返回可变成员

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:41 25 4
gpt4 key购买 nike

我有一个列表,它是我类(class)的私有(private)成员。我已经使用 getter 和 setter 来获取和设置值。SONar 抛出错误 - 不应直接存储或返回可变成员。

例如:ABC 和 DEF 是两个类。

class ABC{
private List<DEF> defList;
public List<DEF> getDefList() { return defList; }
public void setDefList(List<DEF> defList) { this.defList = defList; }

经过大量的谷歌搜索和搜索,我了解到可以按如下方式更改 getter:

public List<DEF> getDefList() { return new ArrayList<>(defList); }

当我尝试类似地使用 setter 时,

public void setDefList(List<DEF> defList) { this.defList.addAll(defList); }

然后变量开始显示

'private field 'defList' is never assigned.

当它是一个列表时,我可以知道正确的做法吗,(另一个类的列表)

注意:Prasad Karunagoda 和 Leo Aso 的答案都有效。我不能将两者都标记为已接受的答案。所以在这里记下

最佳答案

警告是因为你没有给字段一个初始值。这就是您应该如何使用 java.util.Collections 实现代码以确保不变性。

class ABC {
private List<DEF> defList = Collections.emptyList();

public List<DEF> getDefList() {
return defList;
}

public void setDefList(List<DEF> defList) {
// defensively copy, then make immutable
defList = new ArrayList<>(defList);
this.defList = Collections.unmodifiableList(defList);
}

关于java - Sonar - 存储副本 - 不应直接存储或返回可变成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54091837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com