Collection、Date、Map、Calendar などのミュータブル型の返却、またはメソッドパラメーターからこれらのフィールドへの代入を報告します。
このような型はミュータブルであるため、このコンストラクトが原因で所有クラス外からの予期しないオブジェクトの状態変更が発生する可能性があります。 このコンストラクトはパフォーマンスの面では有益ですが、本質的にバグを引き起こす可能性があります。
次のミュータブルな型が報告されます:
java.util.Datejava.util.Calendarjava.util.Collectionjava.util.Mapcom.google.common.collect.Multimapcom.google.common.collect.Tableクイックフィックスにより、配列のフィールドに対して .clone() メソッドの呼び出しが追加されるか、変更不可能なコレクションラッパーが使用されます。
例:
import java.util.*;
class Log {
private String[] messages = {"one", "two", "three"};
private Map<String, String> map = new HashMap<>();
String[] getMessages() {
return messages; // 警告: String[] フィールド 'messages' を返しています
}
Map<String, String> mapping() {
return map; // 警告: Map<String, String> フィールド 'map' を返しています
}
}
クイックフィックス適用後:
import java.util.*;
class Log {
String[] messages = {"one", "two", "three"};
private Map<String, String> map = new HashMap<>();
String[] getMessages() {
return messages.clone();
}
Map<String, String> mapping() {
return Collections.unmodifiableMap(map);
}
}
private メソッド内の代入と返却を無視するには、「private メソッドでの代入および private メソッドからの返却を無視する」オプションを使用します。