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 메서드의 대입과 반환을 무시합니다.