pgm*_*man 9 java arraylist mutable sonarqube
我有一个列表,它是我班上的私人成员。我使用 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; }
Run Code Online (Sandbox Code Playgroud)
经过大量的谷歌搜索和搜索,我了解到可以按如下方式更改 getter:
public List<DEF> getDefList() { return new ArrayList<>(defList); }
Run Code Online (Sandbox Code Playgroud)
当我尝试类似地使用 setter 时,
public void setDefList(List<DEF> defList) { this.defList.addAll(defList); }
Run Code Online (Sandbox Code Playgroud)
然后变量开始显示
'private field 'defList' is never assigned.
Run Code Online (Sandbox Code Playgroud)
我可以知道当它是一个列表时的正确方法吗(另一个类的列表)
注意: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);
}
Run Code Online (Sandbox Code Playgroud)