Java 11: синтаксис локальной переменной для лямбда-параметров - приложения - PullRequest
0 голосов
/ 08 мая 2018

Мне любопытно узнать о Java-11 в целом, но конкретно JEP: 323 , который планирует добавить объявление var в переменные операции Lambda.

Мотивация этой функции хорошо обсуждается здесь . Рассмотрим следующую цитату из статьи:

// #1 - Legal
ITest divide = (@ATest var x, final var y) ->  x / y;
/* #2 Modifiers on Old-Style implicit paramaters => Illegal */
ITest divide = (@ATest x, final y) ->  x / y;

Использование окончательного модификатора для меня ясно и соответствует лучшим практикам неизменяемости.

Однако я не уверен насчет аннотаций. Какая большая польза от возможности комментировать неявный лямбда-параметр?

Можете ли вы привести фактический, полезный пример использования аннотаций для лямбда-переменной операции? Не как мнение, а как реальный пример кода, который более читабелен или эффективен при использовании этой функции.

1 Ответ

0 голосов
/ 08 мая 2018

Какое преимущество дает возможность комментировать неявный лямбда-параметр?

Использование аннотаций в лямбда-выражении должно быть аналогично любому другому атрибуту не-лямбда-выражения. Это может быть использовать:

  • Отражение и вывод некоторой информации об аннотированном объекте во время выполнения.
  • также во время компиляции для отображения поведения, такого как сгенерированный исходный код или другие подсказки для инструментов

Вариант использования, указанный в JEP-323 (вновь заявляя о том, что я не уверен, что это именно то, чего вы ожидаете) -

(@Nonnull var x, @Nullable var y) -> x.process(y)

где аннотации могут использоваться библиотеками для определения значения проверки x и y. При этом вы знаете, что x.process(y), безусловно, не может выдать исключение NullPointerException , даже не установив явную нулевую проверку для x сейчас, что совпадает с любым другим явно аннотированным не лямбда-параметром.

Примечательно, что это одно из преимуществ обеспечения единообразия разрешения var для формальных параметров неявно типизированного лямбда-выражения.

...