次のケースを検討してください
public void setRules(MyRule[] rules) {
this.rules=rules;
}
Sonar
と文句を言って言います。
配列を受け取るコンストラクターとメソッドは、オブジェクトを複製してコピーを保存する必要があります。これにより、ユーザーによる将来の変更が内部機能に影響することを防ぎます。
これは真実であり、これを設定した後に誰かが の値を変更するarray
と、その変更が内部関数に影響を与える可能性があることがわかりました。その配列の変更を複製しても効果はありません。
ここで、別のケースを考えてみましょう
public void setExecutions(List<MyRule> ruleList) {
this.ruleList= ruleList;
}
今Sonar
は何の問題も言わない。ここでクローンが必要ないのはなぜですか?