用於攔截任意Groovy方法調用的ProxyMetaClass和Iterceptor類已有詳細記錄。有沒有辦法攔截財產訪問?當我嘗試通過攔截「的getProperty」要做到這一點,我仍然得到錯誤信息:如何使用ProxyMetaClass攔截Groovy中的屬性訪問?
groovy.lang.MissingPropertyException:沒有這樣的屬性:FOO
用於攔截任意Groovy方法調用的ProxyMetaClass和Iterceptor類已有詳細記錄。有沒有辦法攔截財產訪問?當我嘗試通過攔截「的getProperty」要做到這一點,我仍然得到錯誤信息:如何使用ProxyMetaClass攔截Groovy中的屬性訪問?
groovy.lang.MissingPropertyException:沒有這樣的屬性:FOO
我不能完全肯定的利用情況你正在努力解決,但可能你想要一個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
你的方法似乎是正確的。嘗試一些食譜here。
抓住吸管:你調用的對象的方法真的是你已經元編程的類嗎?有時由於多態性,你沒有使用你認爲你是的類。