【发布时间】:2011-08-16 13:22:13
【问题描述】:
我有以下代码:
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 = ...,但在该方法之外添加任何内容都是可以接受的。
【问题讨论】:
-
当关键字
def或任何数据类型关键字(如string)丢失时,为什么groovy 在执行myClass.myMethod();时会抛出错误? -
我相信当你在脚本中运行它时,你只能设置变量而不定义或声明。当您在脚本中运行它而不定义或声明时,该变量将被放入脚本的绑定中(您可以在脚本中使用 getBinding() 调用访问该绑定)。但是,当您不运行脚本时,没有“绑定”,Groovy 期望您使用 def 或使用数据类型声明它。
标签: groovy properties