Доброго времени суток. Объясните, как работает thenComparing класса Comparator, когда передаешь туда ссылку на метод. В документации написано, что это должен быть keyExtractor, который НЕ принимает аргументы. Тогда почему new MyComp().thenComparing(MyClass::compareTo);
компилируется. Где в документации описание такого варианта thenComparing? Юзаю JDK8, внизу пример.
import java.util.Comparator;
class MyClass
implements Comparable<MyClass> {
String ftitle;
String stitle;
@Override
public int compareTo(MyClass obj) {
return ftitle.compareTo(obj.ftitle);
}
public int hello() {
return 1;
}
}
class MyComp
implements Comparator<MyClass> {
@Override
public int compare(MyClass f, MyClass s) {
return f.stitle.compareTo(s.stitle);
}
}
class Main {
public static void main(String[] args) {
new MyComp().thenComparing(MyClass::compareTo); //OK
new MyComp().thenComparing(Comparator.comparing(MyClass::hello)); //OK
//new MyComp().thenComparing(Comparator.comparing(MyClass::compareTo)); //ERROR
}
}