报告访问非 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;
    ...
  }