Вы также можете использовать propertyMissing
. Это то, что вы можете назвать встроенным методом Groovy.
Объявите это в своем классе:
def propertyMissing(String name) {
if (name.contains(".")) {
def (String propertyname, String subproperty) = name.tokenize(".")
if (this.hasProperty(propertyname) && this."$propertyname".hasProperty(subproperty)) {
return this."$propertyname"."$subproperty"
}
}
}
Затем обратитесь к вашим свойствам по желанию:
def properties = "property1.property2"
assert someGroovyObject."$properties" == someValue
Это автоматически рекурсивно, и вам не нужно явно вызывать метод. Это всего лишь геттер, но вы также можете определить вторую версию с параметрами, чтобы сделать сеттер.
Недостатком является то, что, насколько я могу судить, вы можете определить только одну версию propertyMissing
, поэтому вам нужно решить, является ли навигация по динамическому пути именно той, для которой вы хотите ее использовать.