闭包在groovy vs闭包在java 8(lambda表达式)? [英] closures in groovy vs closures in java 8 (lambda expressions)?

查看:262
本文介绍了闭包在groovy vs闭包在java 8(lambda表达式)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定 doSomething(Function foo){println foo(2)}



Groovy: doSomething({it * it} as Function)



Java: doSomething((x) - &



<解决方案


  • 在Java Lambda表达式中,没有办法以默认名称引用lambda表达式的参数。在Groovy中有类似的线条,我认为它是it。

  • 在Java中,Lambda表达式代表实现单一抽象方法类/接口的一种方便的方法。因此,如果你必须为某个东西创建一个lambda表达式,你必须为它定义一个SAM接口。

  • 在Java中,Lambda表达式只能捕获那些实际上是最终的变量。 / li>
  • 在Java中,有一种使用称为方法引用的方法来表示Lambda表达式的替代方法。所以如果你有一些lambda表达式,例如 {() - > new MyObject();} 它可以写成 MyObject :: new 。我认为不是所有的lambda表达式都可以使用方法引用来表示。



我不认为将理想的比较Java 8中的lambda表达式支持与更成熟的Groovy或Scala支持。这是Java引入lambda表达式的第一步,因此我们可以期望对lambda表达式有更成熟的支持。


Given doSomething(Function foo) { println foo(2) }

Groovy: doSomething( { it*it } as Function )

Java: doSomething( (x) -> x*x )

Is there any difference between the two?

解决方案

  • In Java Lambda Expressions there is no way to refer to the parameters of the lambda expressions by default name. There is something on similar lines in Groovy I think it is "it".
  • In Java Lambda expressions represent a convenient way to implement Single Abstract Method classes/interfaces. So if you have to create a lambda expression for something, you got to have a SAM interface defined for it.
  • In Java, Lambda expressions can capture only those variable which are effectively final.
  • In Java, there is an alternate way to represent a Lambda expression by using something called Method References. So if you have some lambda expressions like {() -> new MyObject();} it can be written as MyObject::new. I think not all lambda expressions can be represented by using Method References.

I dont think it would be ideal to compare the lambda expression support in Java 8 with that of more mature Groovy or Scala support. This is the first step for Java to introduce lambda expressions so going forward we can expect to have more mature support for lambda expressions.

这篇关于闭包在groovy vs闭包在java 8(lambda表达式)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆