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
для формальных параметров неявно типизированного лямбда-выражение.