Ho un percorso per un oggetto all'interno di un oggetto all'interno di un oggetto e voglio impostarlo usando le abilità dinamiche di Groovy. In genere è possibile farlo semplicemente facendo quanto segue:Groovy: imposta il metodo nidificato dinamico usando string come percorso
class Foo {
String bar
}
Foo foo = new Foo
foo."bar" = 'foobar'
Che funziona OK. Ma cosa succede se hai oggetti nidificati? Qualcosa di simile:
class Foo {
Bar bar
}
class Bar {
String setMe
}
Ora voglio utilizzare l'impostazione dinamica, ma
Foo foo = new Foo()
foo."bar.setMe" = 'This is the string I set into Bar'
Restituisce un MissingFieldException.
Eventuali suggerimenti?
AGGIORNAMENTO: Grazie a Tim per avermi indirizzato nella giusta direzione, il codice iniziale lì funziona perfettamente nel recupero di una proprietà, ma ho bisogno di impostare il valore utilizzando la stringa del percorso.
Ecco cosa mi è venuta dalla pagina Tim suggerito:
def getProperty(object, String propertyPath) {
propertyPath.tokenize('.').inject object, {obj, prop ->
obj[prop]
}
}
void setProperty(Object object, String propertyPath, Object value) {
def pathElements = propertyPath.tokenize('.')
Object parent = getProperty(object, pathElements[0..-2].join('.'))
parent[pathElements[-1]] = value
}
http: //stackoverflow.com/questions/5488689/how-to-retrieve-nested-properties-in-groovy –
Sono stato in grado di completare l'operazione sviluppando e utilizzando il metodo getProperty, inserirò la risposta sopra dal commento sezione non è molto buona per inserire il codice in –