提问人:Suminda Sirinath S. Dharmasena 提问时间:7/11/2020 最后编辑:Suminda Sirinath S. Dharmasena 更新时间:7/13/2020 访问量:274
在 Groovy 中发出 Java Lambda
Emitting Java Lambdas in Groovy
问:
在开发用于 Java 代码的 Groovy 库时,我希望能够使用 Java Lambda 而不是 Groovy 特定的机制。
当从 Java 端访问此库 API 时,用户不需要任何特定于 Groovy 的导入或公开任何 Groovy 特定功能。
特定于 Java 的 Lambda 可以传递给 API,并且特定于 Java 的 Lambda 也应该从 API 返回。
有没有办法做到这一点?
例如
def f() {
return { n -> n + 1}
}
返回类型为 。我希望它是.f
groovy.lang.Closure
Function
此外,而不是
def f(Closure c) {
...
c.delegate = this
c.resolveStrategy = DELEGATE_ONLY
...
}
我想用 替换为 .Closure c
Function
在这样做时,当从 Java 端使用它时,Groovy 功能和 API 不会暴露给开发人员。
答:
1赞
Alterlife
7/13/2020
#1
简短的回答是,您将能够像在 Java 中一样做到这一点。
在 java 中,lamda 被接受为实现函数式接口的对象 - 函数式接口是仅包含单个抽象方法的接口,该方法与您将传入的 lambda 的签名相匹配。
例如,您可以使用 Runnable 接口,该接口只有一个没有参数的 run 方法。
在 groovy 中,您将接受 Runnable 类型的对象:
def myGroovyFunction(Runnable r) {
r.run()
}
您可以在此处使用任何函数接口,例如来自 java.util.function 或您自己的接口。
您的 Java 代码现在可以传入 Lambda,如下所示:
MyGroovyClass.myGroovyFunction(() -> {
System.out.println("This will be printed by the groovy function");
})
评论