在查看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();
}
}
//...
}
Run Code Online (Sandbox Code Playgroud)
我想我明白这是做什么的.它是一个实现Comparator接口的Singleton实例.它使用实现Comparable接口的类的"compareTo"进行自然排序(如果我错了,请纠正我).
然而,我不明白为什么使用枚举完成它.我真的很喜欢Singletons的枚举,不要误会我的意思但在这种情况下我个人认为这会更简单:
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);
}
//...
}
Run Code Online (Sandbox Code Playgroud)
除了个人偏好之外,还有任何理由使用枚举来实现吗?