java – 为什么必须用lambda体中的完整代码块括起throw语句?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 为什么必须用lambda体中的完整代码块括起throw语句?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1680字,纯文字阅读大概需要3分钟。
内容图文
![java – 为什么必须用lambda体中的完整代码块括起throw语句?](/upload/InfoBanner/zyjiaocheng/700/3812a19a09114643a284acae66016c5d.jpg)
如果lambda函数中有一个语句,我们可以省略为它定义完整的代码块:
new Thread(() -> System.out.println());
为什么抛出异常的语句不是这种情况?这会产生一个编译错误,说明'{‘预期:
new Thread(() -> throw new RuntimeException());
当然,将lambda主体封装在代码块中可以:
new Thread(() -> {
throw new RuntimeException();
});
解决方法:
一个throw语句是一个语句,而不是一个表达式,所以它必须放在大括号内.根据this article,Java专家组当时对lambdas的语法进行了非正式调查,有四种选择:
> Strawman:#(arglist)(expr)和#(arglist){statements}
> BGGA:{args – >语句}(类似于Scala和Groovy)
> SotL:#{args – >语句}
>雷德蒙德:( args) – > {statements}
最终,选择是采用类似于C#的语法,根据this thread,就我所见,它看起来也与上面的最后一个选项最接近.在C#中,表达式lambdas和语句lambdas之间有区别:
表达式lambda(C#):
(input parameters) => expression
语句lambda(C#):
(input parameters) => {statement;}
语法在this MSDN documentation page中解释.
在上一个帖子中提到了在其他选项中选择此语法的基本原理:
The decision to choose this syntax was twofold:
The syntax scores “pretty well” on most subjective measures (though
has cases where it looks bad, just like all the others do). In
particular, it does well with “small” lambdas that are used as method
arguments (a common case), and also does well with large
(multi-statement) lambdas.Despite extensive searching, there was no clear winner among the
alternatives (each form had some good aspects and some really not very
good aspects, and there was no form that was clearly better than the
others). So, we felt that it was better to choose something that has
already been shown to work well in the two languages that are most like
Java — C# and Scala — rather than to invent something new.
内容总结
以上是互联网集市为您收集整理的java – 为什么必须用lambda体中的完整代码块括起throw语句?全部内容,希望文章能够帮你解决java – 为什么必须用lambda体中的完整代码块括起throw语句?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。