Java 8-为什么他们提供方法参考?

Dar*_*arz 2 java lambda java-8

有什么更好的电话

names.stream().forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

names.stream().forEach(n -> System.out.println(n));
Run Code Online (Sandbox Code Playgroud)

尽管事实上您必须编写更少的代码?在Java 8中引入方法引用还有其他优点吗?

das*_*ght 5

尽管事实上您必须编写更少的代码?在Java 8中引入方法引用还有其他优点吗?

考虑编写语言功能,只需编写更少的代码就足够了。C#中有一个类似的功能,称为方法组,它使编写使用委托的代码更容易。Lambda是匿名类的简写,而匿名类可被视为命名类的简写。人们可以合理地称它们为“语法糖”,但是所有这些功能都可以帮助您减少编写代码。

除了使您缩短代码之外,该功能还可以帮助Java编译器的设计人员生成更有效的代码。例如,可能避免为包装方法引用的每个lambda生成全新类型。

  • 我还要指出的其他优点:方法参考提供了“无点”编程风格的感觉;命名参数不仅仅是更多的字符,它还引起了认知负担,因为它要求我们仔细地遵循它进行每次引用。这也打开了漏洞的大门(一个不相关的,相似名称的变量可能会在体内被取消引用);方法引用明确表明lambda不是闭包。 (4认同)