0

考虑以下情况

public void setRules(MyRule[] rules) {
    this.rules=rules;
}

Sonar抱怨说,

接收数组的构造函数和方法应该克隆对象并存储副本。这可以防止用户未来的更改影响内部功能。

这是真的,当有人array在设置后更改值时,我明白了这一点,这种更改可能会影响内部函数。如果我们克隆该数组更改将不会生效。

现在考虑另一种情况

public void setExecutions(List<MyRule> ruleList) {
    this.ruleList= ruleList;
}

现在Sonar不说任何问题。为什么这里不需要克隆?

4

1 回答 1

2

事实上,这个 PMD 规则背后只有一个动机:原语是按值传递的,而对象是按引用传递的。数组呢?数组是 Java 中的对象,因此也是按引用传递的,但一些初级开发人员可能没有意识到这一点,并且可能认为整个数组是按值传递的。我个人认为这条规则毫无价值。

于 2013-08-22T09:50:23.823 回答