我有以下闭包
def closure = {
println ("closure code")
}
我想添加一个方法。但是如果我尝试
closure.metaClass.fun = { c->
c.call();
println ("extra code");
}
我收到一个异常
groovy.lang.MissingPropertyException: No such property: fun for class: org.codehaus.groovy.runtime.metaclass.ClosureMetaClass
读到另一个答案,我也盲目地试图拨打
ExpandoMetaClass.enableGlobally()
但它不起作用。
有办法实现我想要的吗?
你可以做:
def closure = {
println "closure code"
}
closure.getMetaClass().fun = { ->
delegate.call()
println "extra code"
}
closure.fun()
打印:
closure code
extra code
另一种更简单的方法是:
def closure = {
println "closure code"
}
closure.fun = { ->
closure()
println "extra code"
}
closure.fun()
这种方法的缺点是,我直接引用闭包变量,而不是通过委托。