我有以下代码:
class MyClass {
def myMethod() {
variable = "I am a variable"
}
def propertyMissing(String name) {
println "Missing property $name"
}
}
MyClass myClass = new MyClass();
myClass.myProperty
myClass.myMethod();
在myClass.myProperty中, Missing property myProperty
被打印到控制台 .
但是在 myClass.myMethod()
中,groovy并没有尝试去 propertyMissing
而只是抛出一个
groovy.lang.MissingPropertyException: No such property: variable for class: MyClass
一些在线搜索表明这是因为 myClass.myProperty
调用了getter方法,该方法重定向到propertyMissing .
我猜在类方法中,groovy没有通过变量的getter方法,这就是为什么不调用propertyMissing?
有没有办法使用动态 propertyMissing
或 getProperty
或类似的东西来实现我想要做的事情?
附:我不想在myMethod中执行 def variable = ...
或 String variable = ...
. 我希望 myMethod
中的语法将保持为 variable = ...
,但添加该方法之外的任何内容都是可以接受的 .
1 回答
你可以让你的 class
extend Expando
(Expando is described here)您可以通过为变量创建自己的支持映射来手动滚动类似的功能,并自己编写
get/setProperty
方法,即:虽然从source code for Expando可以看出,这个手工打印的版本检查的次数要少得多,而且我更少信任它;-)