Ich frage mich, wie man geschachtelte Eigenschaften in Groovy am besten abrufen kann, indem man ein gegebenes Objekt und eine beliebige "property" Zeichenkette nimmt. Ich würde gerne so etwas machen:
%Vor%Ich habe es schwer gefunden, ein Beispiel dafür zu finden, dass andere das machen wollen, also verstehe ich vielleicht ein grundlegendes Groovy-Konzept nicht. Es scheint, als müsste es einen eleganten Weg dafür geben.
Als Referenz gibt es ein Feature in Wicket, das genau das ist, was ich suche, den PropertyResolver: Ссылка
Irgendwelche Hinweise würden geschätzt werden!
Ich weiß nicht, ob Groovy einen eingebauten Weg dafür hat, aber hier sind zwei Lösungen. Führen Sie diesen Code in der Groovy-Konsole aus, um ihn zu testen.
%Vor%Groovy Beans lässt Sie direkt auf Felder zugreifen. Sie müssen keine Getter / Setter-Methoden definieren. Sie werden für dich generiert. Wenn Sie auf eine Bean-Eigenschaft zugreifen, wird die Getter / Setter-Methode intern aufgerufen. Sie können dieses Verhalten umgehen, indem Sie den Operator. @ Verwenden. Siehe das folgende Beispiel:
%Vor%Wenn Sie nicht mit Sammlungen arbeiten, können Sie einfach das Feld aufrufen, auf das Sie zugreifen möchten.
%Vor%Wenn Sie auf ein Feld innerhalb einer Sammlung zugreifen möchten, müssen Sie das Element auswählen:
%Vor% Sie können auch propertyMissing
verwenden. So könnte man Groovy's eingebaute Methode nennen.
Deklarieren Sie dies in Ihrer Klasse:
%Vor%Beziehen Sie sich dann wie gewünscht auf Ihre Eigenschaften:
%Vor%Dies ist automatisch rekursiv und Sie müssen keine Methode explizit aufrufen. Dies ist nur ein Getter, aber Sie können auch eine zweite Version mit Parametern definieren, um einen Setter zu erstellen.
Der Nachteil ist, dass Sie, soweit ich das beurteilen kann, nur eine Version von propertyMissing
definieren können, also müssen Sie entscheiden, ob Sie die dynamische Pfadnavigation verwenden möchten.
Tags und Links nested groovy properties resolver getproperty