Was ist das Java-Äquivalent von Pythons property ()?

8

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 ()?

    
Cerin 13.01.2010, 13:03
quelle

6 Antworten

7

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%     
missingfaktor 13.01.2010, 13:08
quelle
3

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.

    
Stefan De Boey 13.01.2010 14:03
quelle
2

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.

    
Tom Dunham 13.01.2010 13:14
quelle
1

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.

    
mR_fr0g 13.01.2010 13:33
quelle
0

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.

    
Peter Štibraný 13.01.2010 13:06
quelle
-1

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.

    
Kico Lobo 13.01.2010 13:48
quelle

Tags und Links