在Groovy中,有没有一种方法可以将方法作为参数传递,而不用将其 Package 在闭包中?它似乎可以处理函数,但不能处理方法。例如,给定以下内容:
def foo(Closure c) {
c(arg1: "baz", arg2:"qux")
}
def bar(Map args) {
println('arg1: ' + args['arg1'])
println('arg2: ' + args['arg2'])
}
这是可行的:
foo(bar)
但是如果bar
是一个类中的方法:
class Quux {
def foo(Closure c) {
c(arg1: "baz", arg2:"qux")
}
def bar(Map args) {
println('arg1: ' + args['arg1'])
println('arg2: ' + args['arg2'])
}
def quuux() {
foo(bar)
}
}
new Quux().quuux()
失败,并显示No such property:类栏:四。
如果我改变这个方法,将bar
Package 在闭包中,它可以工作,但是看起来不必要地冗长:
def quuux() {
foo({ args -> bar(args) })
}
有更干净的路吗?
2条答案
按热度按时间k97glaaz1#
.&
操作员前来救援!一般来说,
obj.&method
将返回一个绑定方法,即在obj
上调用method
的闭包。h5qlskok2#
除了方法指针运算符(
.&
)之外,对于 *Groovy 3.0.0版和更高版本 *,还有等效的、兼容的、众所周知的Java 8+方法引用运算符(::
)。输出量:
方法引用操作符,如Groovy文档中所述:
[...]与Groovy的方法指针操作符提供的功能有些重叠。实际上,对于动态Groovy,方法引用操作符只是方法指针操作符的别名。对于静态Groovy,该操作符产生的字节码类似于Java为相同上下文产生的字节码。