java.lang.Comparator
但不实现 java.io.Serializable
的类。
如果使用不可序列化的比较器来构建 java.util.TreeMap
或 java.util.TreeSet
之类的有序集合,那么该集合也不可序列化。 这可能会导致意外且难以诊断的错误。
由于 java.lang.Comparator
的子类通常无状态,因此只需将它们标记为可序列化,即可轻松避免此类问题。
示例:
class Foo implements Comparator { // 警告
@Override
public int compare(Object o1, Object o2) {
/* ... */
}
}
在应用快速修复后:
class Foo implements Comparator, Serializable { // 此处无警告
@Override
public int compare(Object o1, Object o2) {
/* ... */
}
}