gpt4 book ai didi

java - groovy 中的闭包与 java 8 中的闭包(lambda 表达式)?

转载 作者:搜寻专家 更新时间:2023-10-30 19:56:44 25 4
gpt4 key购买 nike

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

Groovy:doSomething({ it*it } 作为函数)

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

这两者有什么区别吗?

最佳答案

在 Groovy 中,闭包是 groovy.lang.Closure 类型的一等公民,而 Java 8 中的 lambda 是它们所代表的默认方法接口(interface)的实际实例。

这意味着您需要在 Groovy 中使用 as 关键字(如您所示),但或者,在 Java 中您需要指定一个接口(interface),因此在 Groovy 中,您可以这样做:

def adder( int i, Closure cl ) {
cl( i )
}

int v = adder( 2 ) { i ->
i + 8
}

assert v == 10

这在 Java 8 中变为:

public class Test {
interface MyAdder {
int call( int i ) ;
}

public int adder( int i, MyAdder adder ) {
return adder.call( i ) ;
}

public static void main( String[] args ) {
int v = new Test().adder( 2, (x) -> x + 8 ) ;
System.out.println( v ) ;
}
}

显然,您现在也可以在接口(interface)中声明默认实现,我没有在这里展示...

不确定这是否是所有的区别,但至少是一个区别;-)

关于java - groovy 中的闭包与 java 8 中的闭包(lambda 表达式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18842109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com