Java功能接口的单例作为枚举
2022-09-04 08:26:36
在查看 Comparators 类的源代码时,我遇到了这些代码行。
class Comparators {
//...
enum NaturalOrderComparator implements Comparator<Comparable<Object>> {
INSTANCE;
@Override
public int compare(Comparable<Object> c1, Comparable<Object> c2) {
return c1.compareTo(c2);
}
@Override
public Comparator<Comparable<Object>> reversed() {
return Comparator.reverseOrder();
}
}
//...
}
我想我明白这是做什么的。它是一个实现比较器接口的单例实例。它使用实现Compable接口的类的“compareTo”进行自然排序(如果我在其中任何一个方面都错了,请纠正我)。
然而,我不明白的是,为什么它是用枚举完成的。我真的很喜欢单例的枚举,不要误会我的意思,但在这种情况下,我个人认为这会更简单:
public static final Comparator<Comparable<Object>> NATURAL_ORDER_COMPARATOR =
new Comparator<Comparable<Object>>() {
@Override
public int compare(Comparable<Object> c1, Comparable<Object> c2) {
return c1.compareTo(c2);
}
//...
}
除了个人偏好之外,还有什么理由使用枚举来实现这一点吗?