Comparator является типом класса?
Я читал о типовых классах в Scala и думал, что хорошо разбираюсь в них, пока не вспомнил Java.java.util.Comparator
Если я правильно понимаю,Ordering
это прототип типового класса. Единственная разница, которую я могу придумать междуComparator
и примерOrdering
заключается в том, что компараторы обязательно являются явными, в то время как упорядочения могут быть и часто являются неявными.
ЯвляетсяComparator
класс типа? У меня складывается (ошибочное?) Впечатление, что в Java на самом деле нет классов типов. Означает ли это, что класс типов должен иметь возможность быть неявным? Я считал, что неявные преобразования классов типов в основном являются синтаксическим сахаром - как это ни крутопросто" давая компилятору достаточно подсказки - я что-то упустил?
В следующем примере кода показано, какComparator
добавляет операцию упорядочения к типу, который неэто без необходимости изменять указанный тип.
// Comparator used to retroactively fit the MyExample class with an ordering operation.
public static class MyExampleComparator implements Comparator {
public static final Comparator SINGLETON = new MyExampleComparator();
private MyExampleComparator() {}
public int compare(MyExample a, MyExample b) {
return a.value - b.value;
}
}
// Custom type, its only purpose is to show that Comparator can add an ordering operation to it when it doesn't
// have one to begin with.
public static class MyExample {
private final int value;
public MyExample(int v) {
value = v;
}
public String toString() {
return Integer.toString(value);
}
}
public static void main(String... args) {
List list = new ArrayList();
for(int i = 0; i < 10; i++)
list.add(new MyExample(-i));
// Sorts the list without having had to modify MyExample to implement an interface.
Collections.sort(list, MyExampleComparator.SINGLETON);
// Prints the expected [-9, -8, -7, -6, -5, -4, -3, -2, -1, 0]
System.out.println(list);
}