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
2 回答
我'm not completely sure about the use-case that you'试图解决,但你可能想要propertyMissing或getProperty (or maybe invokeMethod)之一 .
第一个将允许您在对象上实际不存在时拦截属性请求:
第二个将允许您拦截所有属性请求,即使对于已定义的属性:
如果您正在使用现有类,则可以使用其中一种方法对其进行子类化,或者将这些方法添加到metaClass:
你的方法似乎是正确的 . 尝试一些食谱here .
grab 吸管:是你在元编程的类中调用方法的对象吗?有时由于多态性,你没有使用你认为自己的课程 .