메서드 매개변수의 반환이나 대입이 Collection, Date, Map, Calendar와 같은 배열이나 가변 타입의 필드로 이뤄졌음을 보고합니다.

이러한 타입은 가변적이므로, 이 구문으로 인해 소유 클래스 외부에서 예기치 않은 객체 상태 수정이 발생할 수 있습니다. 이 구문은 성능면에서 유익할 수 있지만 본질적으로 버그가 발생하기 쉽습니다.

다음과 같은 가변 타입이 보고됩니다:

빠른 수정에서는 배열에 대해 필드의 .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 메서드의 대입과 반환을 무시합니다.