Java 11:Lambda 参数的局部变量语法 - 应用
Java 11: Local-Variable Syntax for Lambda Parameters - applications
我很好奇 Java-11 in general, but specifically 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)
其中库可以使用注释来确定对 x
和 y
的值检查。在那,你知道 x.process(y)
肯定不能抛出 NullPointerException 甚至不对 x
进行显式空检查,这与任何其他显式注释的非 - lambda 参数。
值得注意的是,这是为隐式类型的 lambda 表达式的形式参数引入允许 var
的一致性的好处之一。
我很好奇 Java-11 in general, but specifically 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)
其中库可以使用注释来确定对 x
和 y
的值检查。在那,你知道 x.process(y)
肯定不能抛出 NullPointerException 甚至不对 x
进行显式空检查,这与任何其他显式注释的非 - lambda 参数。
值得注意的是,这是为隐式类型的 lambda 表达式的形式参数引入允许 var
的一致性的好处之一。