nameder Entsprechung in Java

8

In C # 6.0 wurde der Operator nameof() eingeführt, der eine Zeichenfolge zurückgibt, die den Namen von Klassen- / Funktions- / Methoden- / lokalen-Variablen- / Eigenschaftsbezeichnern darstellt, die in ihn eingefügt werden.

Wenn ich eine Klasse wie diese habe:

%Vor%

Ich kann den Operator folgendermaßen verwenden:

%Vor%

Dies ist nützlich, da die korrekte Zeichenfolge zum Zeitpunkt der Kompilierung überprüft wird. Wenn ich den Namen einer Eigenschaft / Methode / Variable falsch schreibe, gibt der Compiler einen Fehler zurück. Auch wenn ich umgestalte, werden alle Zeichenfolgen automatisch aktualisiert. Siehe zum Beispiel diese Dokumentation für echte Anwendungsfälle.

Gibt es in Java ein Äquivalent zu diesem Operator? Ansonsten, wie kann ich das gleiche Ergebnis (oder ähnliches) erreichen?

    
Massimiliano Kraus 28.11.2016, 18:18
quelle

4 Antworten

9

Leider gibt es nichts dergleichen. Ich hatte vor einer Weile nach dieser Funktionalität gesucht und die Antwort schien zu sein, dass dieses Zeug im Allgemeinen nicht existiert.

Siehe Name eines Feldes abrufen

Sie könnten Ihr Feld natürlich mit einer "benannten" Anmerkung versehen, um dieses Ziel für Ihre eigenen Klassen zu erreichen. Es gibt eine große Vielfalt von Frameworks, die tatsächlich von ähnlichen Konzepten abhängen. Trotzdem ist dies nicht automatisch.

    
nasukkin 28.11.2016, 18:24
quelle
6

Sie können nicht.

Sie können eine Methode oder ein Feld mithilfe von Reflektion abrufen, aber Sie müssen den Methodennamen als String fest codieren, wodurch der ganze Zweck beseitigt wird.

Das Konzept der Eigenschaften ist nicht in Java eingebaut wie in C #. Getters und Setter sind nur normale Methoden. Sie können nicht einmal so einfach auf eine Methode verweisen wie in Ihrer Frage. Du könntest mit Reflektion versuchen, ein Handle zu einer Getter-Methode zu bekommen und dann die get abschneiden, um den Namen der "Eigenschaft" zu erhalten, die ihr ähnelt, aber das ist hässlich und nicht das Gleiche.

Wie bei lokalen Variablen ist das überhaupt nicht möglich.

    
f1sh 28.11.2016 18:24
quelle
3

Sie können nicht.

Wenn Sie mit Debug-Symbolen kompilieren, enthält die .class-Datei eine Tabelle mit Variablennamen (auf diese Weise ordnen Debugger Variablen Ihrem Quellcode zu), aber es gibt keine Garantie dafür, dass dies vorhanden ist und in der Laufzeit nicht verfügbar ist .

    
Muhammad Ramzan 28.11.2016 18:32
quelle
3

Dies kann mit Laufzeit-Byte-Code-Instrumentierung erfolgen, zum Beispiel mit der Byte-Buddy-Bibliothek.

Siehe diese Bibliothek: Ссылка

Der Ansatz wird hier beschrieben: Ссылка

Anwendungsbeispiel:

%Vor%     
jreznot 11.10.2017 03:36
quelle

Tags und Links