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

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

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

// #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 ответов


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

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

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

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

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

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

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