我需要传递一个方法列表,用“闭包方式”在类中执行,参见下面的代码
class A{
def m1(){
println "Method1"
}
def m2(){
println "Method1"
}
def commands = { closure->
println "before"
closure.call()
println "after"
}
}
A a = new A()
a.commands{
println "before execute method m1"
m1() //A need to execute m1 method of the class A
println "after execute method m1"
}
当我评论m1()
输出
before
before execute method m1
after execute method m1
after
否则抛出异常MissingMethodException: No signature of method for method m1()
因此,它无法将m1()
方法识别为class A
答案 0 :(得分:6)
根据你真正想要完成的事情,你可能需要这样的东西......
class A{
def m1(){
println "Method1"
}
def m2(){
println "Method1"
}
def commands(closure) {
def c = closure.clone()
c.delegate = this
println "before"
c()
println "after"
}
}
委托有机会响应在闭包内部进行的方法调用。将委托设置为this
将导致将m1()
的调用分派到A
的实例。您可能还有兴趣设置闭包的resolveStrategy
属性。 resolveStrategy
的有效值为Closure.DELEGATE_FIRST
,Closure.OWNER_FIRST
,Closure.DELEGATE_ONLY
,Closure.OWNER_ONLY
。 owner
是创建闭包的东西,无法更改。可以为delegate
分配任何对象。当闭包进行方法调用时,方法可以由owner
或delegate
处理,resolveStrategy
在决定使用哪个方法时起作用。我认为名称DELEGATE_ONLY
,OWNER_ONLY
,DELEGATE_FIRST
和OWNER_FIRST
是不言自明的。如果您需要更多信息,请与我们联系。
我希望有所帮助。