我担心我是Groovy的初学者,所以这可能非常愚蠢。 (使用groovy 2.3.4) 我有以下代码:
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()
但我仍然得到同样的错误
更新
似乎如果我通过使用实例引用而不是使用 this 在类外部添加方法,它就可以工作。
是否无法从实例本身动态添加实例的方法?