final이 아닌 변수에 액세스하는 hashCode() 구현을 보고합니다.

그러한 액세스를 사용하면 hashCode()가 객체 수명 주기의 각기 다른 시점에 다른 결과를 반환할 수 있어 표준 컬렉션 클래스 사용 시 문제가 발생할 수 있습니다.

예:


  class Drink {
    String name;
    Drink(String name) { this.name = name; }
    @Override public int hashCode() {
      return Objects.hash(name); // 경고
    }
  }
  ...
    Drink coffee = new Drink("Coffee");
    priceMap.put(coffee, 10.0);
    coffee.name = "Tea";
    double coffeePrice = priceMap.get(coffee); // 찾을 수 없음

필드를 final로 만드는 빠른 수정이 제안됩니다.


  class Drink {
    final String name;
    ...
  }