用于拦截任意Groovy方法调用的ProxyMetaClass和Iterceptor类已有详细记录。是否还有一种拦截财产访问的方法?当我尝试拦截“getProperty”时,我仍然收到错误消息:
groovy.lang.MissingPropertyException:没有这样的属性:foo
答案 0 :(得分:1)
我不完全确定您尝试解决的用例,但您可能想要其中一个propertyMissing或getProperty (or maybe invokeMethod)。
第一个将允许您在对象上实际不存在时拦截属性请求:
class Person {
def name = "Ted"
def propertyMissing(String name) { "my $name" }
}
def p = new Person()
assert "my address" == p.address
assert "my email" == p.email
assert "Ted" == p.name // property isn't missing
第二个将允许您拦截所有属性请求,即使对于已定义的属性:
class Person {
def name = "Ted"
def getProperty(String name) { "my $name" }
}
def p = new Person()
assert "my address" == p.address
assert "my email" == p.email
assert "my name" == p.name
如果您正在使用现有类,则可以使用其中一种方法对其进行子类化,或者将这些方法添加到metaClass中:
String.metaClass.getProperty = { String name ->
return "String's property $name"
}
assert "String's property foo" == "".foo
答案 1 :(得分:0)
您的方法似乎是正确的。尝试一些食谱here。
抓住吸管:是你在元编程的类中调用方法的对象吗?有时由于多态性,你没有使用你认为自己的课程。