有没有办法在groovy 1.x中编写Java8 lambda表达式? 我知道groovy 2.3.x支持来自这个post的Java8 lambda表达式,但是有可能在groovy中编写Java 8 lambda吗? 我有一些Java 8代码,我正在使用Spock进行测试,但是我的项目使用了groovy 1.x。
答案 0 :(得分:10)
事实证明,您可以使用groovy 1.x中的as
关键字将groovy Closure
转换为java 8 lambda。
考虑以下java类
public class Foo {
public static boolean getBar(Predicate<String> predicate) {
return predicate.test("hello");
}
}
从Spock测试(在groovy中)我们可以写
class FooSpecTest extends Specification {
def "test foo"() {
when:
boolean result = Foo.getBar({x -> x.contains("blah")} as Predicate<String>)
then:
result == true
}
}
答案 1 :(得分:5)
根据您发布的link,这些评论已经回答了问题。您可以尝试使用Closures
。
基于官方Groovy
文档:
Groovy 2.3不支持Java 8提供的新语法结构 (例如lambdas,方法引用,接口中的默认方法, 等),但您已经可以使用JDK 8提供的新API, 甚至使用Groovy闭包来代替Java 8 lambdas。
您使用的是较旧的Groovy
版本,如果2.3
不支持,则您的版本不会。
来源:http://www.groovy-lang.org/releasenotes/groovy-2.3.html
2.4(http://www.groovy-lang.org/releasenotes/groovy-2.4.html)
中没有提及