Java 11: Синтаксис локальных переменных для лямбда-параметров - приложения

Мне интересно узнать о 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

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

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

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

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

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

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

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