Je ne suis pas complètement sûr de l'utilisation cas que vous essayez de résoudre, mais vous voulez probablement l'un des propertyMissing ou getProperty (or maybe invokeMethod).
Le premier vous permettra d'intercepter les demandes de propriété quand ils ne sont en fait sur l'objet:
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
La seconde vous permettra d'intercepter toutes les demandes de propriété, même pour les propriétés définies:
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
Si vous travaillez avec une classe existante, vous pouvez soit la sous-classer avec l'une de ces méthodes, soit ajouter ces méthodes à la métaClasse:
String.metaClass.getProperty = { String name ->
return "String's property $name"
}
assert "String's property foo" == "".foo