考虑以下情况
public void setRules(MyRule[] rules) {
this.rules=rules;
}
Sonar
抱怨说,
接收数组的构造函数和方法应该克隆对象并存储副本。这可以防止用户未来的更改影响内部功能。
这是真的,当有人array
在设置后更改值时,我明白了这一点,这种更改可能会影响内部函数。如果我们克隆该数组更改将不会生效。
现在考虑另一种情况
public void setExecutions(List<MyRule> ruleList) {
this.ruleList= ruleList;
}
现在Sonar
不说任何问题。为什么这里不需要克隆?