Inspectopedia Help

Non-final field referenced in 'compareTo()'

Reports access to a non-final field inside a compareTo() implementation.

Such access may result in compareTo() returning different results at different points in the object's lifecycle, which may in turn cause problems when using the standard collections classes, for example java.util.TreeSet.

A quick-fix to make the field final is available only when there is no write access to the field, otherwise no fixes are suggested.

Example:

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

After the quick-fix is applied:

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

Inspection Details

Available in:

IntelliJ IDEA 2023.3, Qodana for JVM 2023.3

Plugin:

Java, 233.SNAPSHOT

Last modified: 13 July 2023