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);
}
}