Я не совсем уверен насчет варианта использования, который вы пытаетесь решить, но, скорее всего, вам понадобится либо propertyMissing , либо getProperty (или, возможно, 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
Если вы работаете с существующим классом, вы можете либо создать его подкласс с помощью одного из этих методов, либо добавить эти методы в метакласс:
String.metaClass.getProperty = { String name ->
return "String's property $name"
}
assert "String's property foo" == "".foo