В книге OCP Study Guide приведен пример компаратора, который можно инициализировать двумя способами. Первый - через анонимный класс, подобный этому:
Comparator<Duck> byWeight = new Comparator<Duck>(){
public int compare(Duck d1, Duck d2){
return d1.getWeight() - d2.getWeight();
}
};
Это я могу понять. Согласно книге это можно заменить лямбда-выражением, подобным этому:
Comparator<Duck> byWeight = (d1,d2) -> d1.getWeight() - d2.getWeight();
Теперь этого я не понимаю. Лямбда-выражение не возвращает объект Comparator, чего я не мог сейчас себе представить, поскольку Comparator является интерфейсом.
Так относится ли оператор new
в первом примере к создаваемому анонимному классу, который называется Comparator, потому что этот анонимный класс реализует интерфейс Comparator?
Что именно происходит в примере 2 ? Объект создан как-то из лямбда-выражения? В этом примере вы используете byWeight
в качестве ссылочной переменной, верно?
Я действительно не понимаю этого, кто-нибудь может объяснить, пожалуйста? Спасибо.