java.lang.Comparator
,
but do not implement java.io.Serializable
.
If a non-serializable comparator is used to construct an ordered collection such
as a java.util.TreeMap
or java.util.TreeSet
, then the
collection will also be non-serializable. This can result in unexpected and
difficult-to-diagnose bugs.
Since subclasses of java.lang.Comparator
are often stateless,
simply marking them serializable is a small cost to avoid such issues.
Example:
class Foo implements Comparator { // warning
@Override
public int compare(Object o1, Object o2) {
/* ... */
}
}
After the quick-fix is applied:
class Foo implements Comparator, Serializable { // no warning here
@Override
public int compare(Object o1, Object o2) {
/* ... */
}
}