Рассматривая исходный код класса 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();
}
}
//...
}
Я думаю, я понимаю, что это делает. Это экземпляр Singleton, который реализует интерфейс Comparator. Он использует "compareTo" классов, которые реализуют интерфейс Comparable для естественного упорядочения (пожалуйста, поправьте меня, если я ошибаюсь в этом).
Однако я не понимаю, почему это делается с использованием перечисления. Мне очень нравятся перечисления для 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);
}
//...
}
Есть ли какие-либо причины для этого, используя перечисления, помимо личных предпочтений?