考虑以下案例
public void setRules(MyRule[] rules) {
this.rules=rules;
}
Sonar
抱怨并说,
接收数组的构造函数和方法应克隆对象和 存储副本。这可以防止未来用户的更改产生影响 内部功能。
这是真的,当有人在设置之后改变array
的值时,我明白了这一点,这种改变可能会对内部函数产生影响。如果我们克隆该数组,则更改将不起作用。
现在考虑另一个案例
public void setExecutions(List<MyRule> ruleList) {
this.ruleList= ruleList;
}
现在Sonar
没有说出任何问题。这里为什么不需要克隆?
答案 0 :(得分:2)
事实上,这个PMD规则背后只有一个动机:原语是按值传递的,而对象是通过引用传递的。阵列怎么样?数组是Java中的对象,因此也通过引用传递,但是一些初级开发人员可能没有意识到这一点,并且可能认为整个数组都是按值传递的。我个人认为这条规则毫无价值。