声纳扫描 - 不应直接存储或返回可变成员

Swa*_*eel 1 java clone mutable sonarqube

当我进行声纳扫描时,我得到了“不应直接存储或返回可变成员”的漏洞。在提到我们应该克隆可变对象或返回不可修改列表的地方也提供了解决方案。但是,如果我克隆了对象,然后如果我想更新值,那么我如何访问原始对象,因为我已经返回了克隆对象?对此的任何想法将不胜感激。提前致谢

G. *_*eam 5

但是,如果我克隆对象,然后再更新值,那么如何访问原始对象,因为我返回了克隆对象

你没有。至少不是来自来电者。

我会在这里冒昧地说我们正在谈论一个列表,所以:

public class MyClass {
  private List<String> strings;

  public List<String> getStrings(){ 
    // returns a copy, so member list is still intact
    return new ArrayList<String>(strings);
  }

  public void addString(String newString) {
    strings.add(newString);
  }

  public void dropString(String oldString) {
    strings.remove(oldString);
  }

  public void replaceString(String oldString, String newString) {
    dropString(oldString);
    addString(newString);
  }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,您可以通过所属类控制对成员操作的访问。如果你真的想要一个任何人都可以获取和更新的公共成员(不是我推荐的),那么删除 getter 并创建 member public