我在使用propertyMissing()
和GroovyShell
我有文件
/**
* @file FooScript.groovy
*/
abstract class FooScript extends Script {
def propertyMissing(String name) {
"This is the property '$name'"
}
def propertyMissing(String name, value) {
println "You tried to set property '$name' to '$value'"
}
}
和
/**
* @file FooScriptTest.groovy
*/
import org.codehaus.groovy.control.*
def fooScript = """\
foo = 'bar'
println foo"""
def conf = new CompilerConfiguration()
conf.setScriptBaseClass("FooScript")
def sh = new GroovyShell(conf)
sh.evaluate fooScript
当我运行FooScriptTest.groovy
时,我期待输出
您尝试将属性'foo'设置为'bar'
这是属性'foo'
我得到的是:
巴
似乎我的propertyMissing()
被默认值覆盖。我该如何防止这种情况?
答案 0 :(得分:2)
使用此代替
abstract class BarScript extends Script {
def getProperty(String name) {
"This is the property '$name'"
}
void setProperty(String name, value) {
println "You tried to set property '$name' to '$value'"
}
}
missingProperty
方法是捕获属性访问权的最后一个资源,
只有当其他一切都失败时才进行测试
但是groovy.lang.Script
已经实现了更高优先级的方法get/setProperty
因此,为了捕获缺失的属性,这些是您必须在子类中重写的方法