我需要通过“闭包方式”传递要在类内执行的方法列表,请参见下面的代码
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
根据您真正要完成的工作,您可能想要这样的东西...
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
ARE 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
我想不言自明。如果您需要更多信息,请告诉我。
希望对您有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句