在Groovy 1.x中编写Java8 Lambdas
有没有办法在Groovy1.x中编写Java8Lambda表达式? 我知道Groovy2.3.x支持Java8Lambda表达式,但是可以用groovy编写Java8Lambda吗? 我有一些用Spock测试的Java8代码,但我的项目在使用Groovy1.x时遇到了问题 否,建议用于Groovy 3.0 不在最新的2.3/2.4.1中: 根据你发表的评论,这些评论中已经给出了答案。您可以尝试使用在Groovy 1.x中编写Java8 Lambdas,java,groovy,lambda,java-8,spock,Java,Groovy,Lambda,Java 8,Spock,有没有办法在Groovy1.x中编写Java8Lambda表达式? 我知道Groovy2.3.x支持Java8Lambda表达式,但是可以用groovy编写Java8Lambda吗? 我有一些用Spock测试的Java8代码,但我的项目在使用Groovy1.x时遇到了问题 否,建议用于Groovy 3.0 不在最新的2.3/2.4.1中: 根据你发表的评论,这些评论中已经给出了答案。您可以尝试使用闭包 根据官方Groovy文档: Groovy 2.3不支持Java8提供的新语法结构 (如lamb
闭包
根据官方Groovy
文档:
Groovy 2.3不支持Java8提供的新语法结构
(如lambdas、方法引用、接口中的默认方法、,
等等),但您已经可以很好地使用JDK 8提供的新API了,
甚至使用Groovy闭包代替Java8Lambdas
您使用的是一个旧得多的Groovy
版本,如果2.3
不支持它,您的版本将不支持它
资料来源:
2.4()中没有提到任何内容,结果表明,您可以在groovy 1.x中使用
as
关键字将groovy闭包转换为java 8 lambda。
考虑下面的java类< /p>
public class Foo {
public static boolean getBar(Predicate<String> predicate) {
return predicate.test("hello");
}
}
公共类Foo{
公共静态布尔getBar(谓词){
返回谓词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
}
}
class-FooSpecTest扩展了规范{
def“测试食品”(){
什么时候:
布尔结果=Foo.getBar({x->x.contains(“blah”)}作为谓词)
然后:
结果==真
}
}
我不明白这一点:“我从这篇文章中知道groovy 2.3.x支持Java8 lambda表达式,但是可以在groovy中编写Java8 lambda吗?”。你说你知道,然后你收回它。为什么不能简单地将您的Spock版本升级到最新版本?您是否尝试过在Spock测试中运行Java 8代码?另外,发布一个Java8 lambda的示例。可能有一种简单的Groovy方法,我引用的帖子展示了Groovy编译器如何不接受java8语法。我想知道是否有另一种方法来构造编译的lambda表达式。e、 g.新函数(…)
如果您使用的是Gradle,为什么不升级版本?我无法升级到Spock的最新版本,因为我的项目依赖groovy 1.x升级到2.x会破坏我所依赖的现有库。太好了!当我试图将“s”字符传递给函数时,我刚刚了解了as关键字,Groovy将其解释为字符串s’作为char(或者是Character)做了这个把戏。