Меня очень раздражает синтаксис method reference (где ::). Я решительно не понимаю, зачем он нужен и на мой взгляд он ухудшает читаемость кода. Хотелось бы услышать стороннее мнение. Приведу несколько фрагментов кода.
Здравствуйте, vsb, Вы писали:
vsb>Меня очень раздражает синтаксис method reference (где ::). Я решительно не понимаю, зачем он нужен и на мой взгляд он ухудшает читаемость кода. Хотелось бы услышать стороннее мнение. Приведу несколько фрагментов кода.
Выглядит не очень, согласен. Но почему-то идея с настройками по умолчанию предпочитает method reference.
vsb>Я предполагаю, что method reference может компилироваться в незначительно более быстрый код, но уверен, что разница неизмерима на практике.
Чет у меня сомнения что какая-то разница будет. Проверять влом.
WBR, Igor Evgrafov
Re: Легко ли читается method reference вместо lambda?
Здравствуйте, vsb, Вы писали:
vsb>Меня очень раздражает синтаксис method reference (где ::). Я решительно не понимаю, зачем он нужен и на мой взгляд он ухудшает читаемость кода. Хотелось бы услышать стороннее мнение. Приведу несколько фрагментов кода.
Получается сильно компактнее, когда есть параметры.
public static void sample() {
fooConsumer(Bar::intConsumer);
}
interface Foo {
void foo(int i1, int i2, int i3, int i4);
}
public static void fooConsumer(Foo foo) {
}
public static void intConsumer(int i1, int i2, int i3, int i4) {
}
vsb>Я предполагаю, что method reference может компилироваться в незначительно более быстрый код, но уверен, что разница неизмерима на практике.
Как и многое в java — это зависит от ситуации. Например в этом случае компилятор может точно определить, что не нужно на каждый вызов создавать лямбду.
Re: Легко ли читается method reference вместо lambda?
Здравствуйте, vsb, Вы писали:
vsb> Меня очень раздражает синтаксис method reference (где ::). Я решительно не понимаю, зачем он нужен и на мой взгляд он ухудшает читаемость кода. Хотелось бы услышать стороннее мнение. Приведу несколько фрагментов кода.
vsb> .filter(appointment -> nonNull(appointment))
Вот это отвратительно. Не знаю почему такое спросом пользуется. Открываем javadoc, читаем: API Note: This method exists to be used as a Predicate, filter(Objects::nonNull).
vsb> .map(responseItem -> responseItem.getIin())
я обычно сокращаю: .map(v -> v.getIin()) тогда имеет смысл.
vsb> Я предполагаю, что method reference может компилироваться в незначительно более быстрый код, но уверен, что разница неизмерима на практике.
Да, похоже на правду. Для лямбды будет сгенерирован синтетический метод, а ссылка на метод будет использовать существующий.