报告对 compareTo() 实现中的非 final 字段的访问。

这样的访问可能导致 compareTo() 在对象生命周期的不同时刻返回不同的结果,进而可能在使用 java.util.TreeSet 等标准集合类时导致问题。

只有在对该字段不具备写入访问权限时,才可以通过快速修复令该字段为 final,否则不建议进行修复。

示例:


  class Foo implements Comparable<Foo>{
    private int index;
    Foo(int idx) {
      index = idx;
    }
    @Override
    public int compareTo(Foo foo) {
     return Integer.compare(this.index, foo.index);
    }
  }

在应用快速修复后:


  class Foo implements Comparable<Foo>{
    private final int index;
    Foo(int idx) {
      index = idx;
    }
    @Override
    public int compareTo(Foo foo) {
      return Integer.compare(this.index, foo.index);
    }
  }