Ich bin neu in Java und möchte einige Klassenvariablen erstellen, die beim Zugriff dynamisch berechnet werden, wie Sie es in Python mit der Methode property () tun können. Ich bin mir jedoch nicht sicher, wie ich das beschreiben soll. Googling zeigt mir viel über die Java-Klasse "Property", aber das scheint nicht das Gleiche zu sein. Was ist das Java-Äquivalent von Pythons property ()?
Es gibt keine solche in Java integrierte Funktion. Sie müssen alle Getter und Setter explizit selbst schreiben. IDEs wie Eclipse können diesen Standardcode jedoch für Sie generieren.
Zum Beispiel:
%Vor% Sie können sich das Projekt Lombok ansehen, das die Anmerkungen @Getter
und @Setter
enthält etwas ähnlich wie Pythons property
.
Bei Lombok reduziert sich das obige Beispiel auf:
%Vor% Die eingebaute property () -Funktion macht genau das Gegenteil von dem, was hier in den Antworten beschrieben ist. Es geht nicht darum, Getter und Setter für Membervariablen zu generieren. Sie können nur eine Methode aufrufen, indem Sie auf eine Eigenschaft zugreifen (obwohl Sie nur auf eine Variable in der Python-Klasse zugreifen, wird eine Funktion aufgerufen). ( dieser Beitrag erläutert, wie und warum er verwendet wird.)
Das heißt, Java bietet so etwas nicht an. noch mehr wird der Zugriff auf Eigenschaften in Java abgeraten. Ich denke, Sie könnten es in Groovy Skriptsprache und der Meta-Magie tun. aber ich weiß nicht aus meinem Kopf, wie man das macht.
Sie existieren nicht wirklich. In Java ist es üblich, Mitglieder als private
oder protected
zu deklarieren und den Zugriff nur über Methoden zu erlauben. Dies führt oft zu vielen kleinen getFoo()
und setFoo(newFoo)
Methoden. Python hat nicht wirklich private
und protected
und es ist üblicher, direkten Zugriff auf Mitglieder zu erlauben.
Wie andere bemerkt haben, hat Java Getter und Setter, aber es gibt kein strenges Analogon. Es gibt eine dritte Bibliothek namens Projekt Lombok , die Anmerkungen verwendet, um die Getter und Setter in den .class-Dateien zur gleichen Zeit zu generieren. Dies könnte verwendet werden, um die Dinge ein wenig weniger ausführlich zu machen.
Möchten Sie neue Felder / Getter / Setter in der Klasse erstellen? Wenn Sie dies in Runtime machen wollen, müssen Sie mit Ihren Feldern und Methoden eine komplett neue Klasse anlegen und in die JVM laden. Um eine neue Klasse zu erstellen, können Sie eine Bibliothek wie ASM oder CGLib verwenden, aber wenn Sie neu in Java sind, möchten Sie damit nicht anfangen.
Eigentlich können Sie dieses Verhalten in Java simulieren.
WARNUNG: hässliche Lösung unter
Sie können eine Methode in einer Dienstprogrammklasse wie den folgenden Code schreiben:
%Vor%Sie können es tatsächlich als eine statische Methode deklarieren und dann diese Methode einfach in Ihre Klassen importieren, die dieses Verhalten benötigen.
Groovy unterstützt übrigens diese Funktion.
Tags und Links python java properties