Java 11 : Local-Variable Syntax for Lambda Parameters - applications

标签 java lambda annotations var java-11

我很好奇Java-11一般而言,但特别是JEP:323它计划将 var 声明添加到 Lambda 操作变量。

很好地讨论了此功能背后的动机 here . 考虑文章中的以下引用:

// #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;

final 修饰符的用法对我来说很清楚,并且符合不变性最佳实践。

但是,我不确定注释。能够注释 lambda 隐式参数的最大好处是什么?

您能否提供一个在 lambda 操作变量上使用注释的实际有益示例?不是意见问题,而是作为使用此功能时更具可读性或效率的代码的实际示例。

最佳答案

What is the great benefit of being able to annotate a lambda implicit parameter?

lambda 语句中注释的用法应类似于非 lambda 语句中的任何其他属性。这可能是为了利用:

  • 在运行时反射和推断有关带注释对象的一些信息。
  • 还在编译时描述生成的源代码或其他工具提示等行为

JEP-323 中陈述的用例 本身(重申自己不确定这是否是您所期待的)-

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

库可以使用注释来确定对 xy 的值检查。在那里,您知道 x.process(y) 肯定不会抛出 NullPointerException ,甚至不对 x 进行显式空检查,现在这是与任何其他明确注释的非 lambda 参数相同。

值得注意的是,这是允许将 var 作为隐式类型 lambda 表达式的形式参数的统一性的好处之一。

关于Java 11 : Local-Variable Syntax for Lambda Parameters - applications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50225672/

相关文章:

c# - 需要帮助理解 lambda(柯里化(Currying))

java - 添加到数组时从 map 中删除? ( lambda )

java - 安卓工作室 : @Override "Annotations are not allowed here"

java - 在 Camel 中提取路由统计信息

java - ActiveMQ持久化: some troubles with AMQ Message Store

java - 在新值(value)出现之前先弄清楚科学按钮

java - Hibernate注解,Mysql TEXT列,始终创建varchar

java - 如何使用 Filter 比较原始列表与 recyclerview 中的过滤列表?

c# - lambda 表达式函数

java - 如何在 Kotlin 中使用 Swagger @ApiResponses 注解?