无法从实例中使用元类将方法动态添加到Groovy
恐怕我是Groovy的初学者,所以这可能非常愚蠢。(使用groovy 2.3.4) 我有以下代码:无法从实例中使用元类将方法动态添加到Groovy,groovy,Groovy,恐怕我是Groovy的初学者,所以这可能非常愚蠢。(使用groovy 2.3.4) 我有以下代码: class Test { public void method() { def methodName = "dynamicMethodName" this.metaClass."$methodName" = {->} this."${methodName}"() } } new Test().method() 运行此操作将
class Test {
public void method() {
def methodName = "dynamicMethodName"
this.metaClass."$methodName" = {->}
this."${methodName}"()
}
}
new Test().method()
运行此操作将引发以下错误:
Caught: groovy.lang.MissingPropertyException: No such property: dynamicMethodName for class: groovy.lang.MetaClassImpl
groovy.lang.MissingPropertyException: No such property: dynamicMethodName for class: groovy.lang.MetaClassImpl
at Test.method(what.groovy:5)
at Test$method.call(Unknown Source)
at what.run(what.groovy:10)
有人能帮我找出我做错了什么吗?我还试着不要“太过动态”,并对代码进行了如下修改:
class Test {
public void method() {
this.metaClass.dynamicMethodName = {->}
this.dynamicMethodName()
}
}
new Test().method()
但我还是犯了同样的错误
更新
如果我通过使用实例引用(而不是使用实例引用)将方法添加到类之外,它似乎可以工作
没有办法从实例本身为实例动态添加方法吗?事实证明,如果该类扩展了Expando类,它就可以工作
在这里可以找到答案:或者在调用方法()之前对脚本使用
ExpandoMetaClass.enableglobal()
。