Java 11:Lambda参数的本地变量语法 - 应用程序

Ran*_*itz 14 java lambda annotations var 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;
Run Code Online (Sandbox Code Playgroud)

最终修饰符的使用对我来说很清楚,并且符合不变性最佳实践.

但是,我不确定注释.能够注释lambda隐式参数有什么好处?

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

Nam*_*man 6

能够注释lambda隐式参数有什么好处?

lambda语句中的注释的使用应该类似于非lambda语句中的任何其他属性.这可以是利用:

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

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

(@Nonnull var x, @Nullable var y) -> x.process(y)
Run Code Online (Sandbox Code Playgroud)

其中注释可以由库用于确定值检查xy.在那里,你知道x.process(y)当然不能抛出NullPointerException ,甚至不用x现在的显式null检查,这与任何其他显式注释的非lambda参数相同.

值得注意的是,这是引入允许var隐式类型的lambda表达式的形式参数的一致性的好处之一.