Reflexion: Konstante Variablen innerhalb einer Klasse per reflection geladen
Habe ich eine Klasse, die eine Reihe von Konstanten Strings.
Muss ich laden dieser Klasse per reflection und abrufen dieser Konstanten.
Ich kann aufstehen:
controllerClass = Class.forName(constantsClassName);
Object someclass = controllerClass.newInstance();
aber ich bin verwirrt, wie das abrufen der Felder in dieser Klasse.
- möglich, Duplikat der Zugriff auf die Java static final ivar Wert durch Reflexion
- Zwei kurze Fragen: 1. Sind diese Konstanten private? 2. Sind diese Konstanten konstant?
- public static final
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine schnelle Probe auf den Zugriff auf Felder --
Hier ein kleines Beispiel:
Läuft dieses kleine Programm Ausgänge:
Ein paar Beobachtungen:
Statische Felder der gelieferten Sache zu
Field.get()
werden kannnull
.Für die Kürze, ich habe eine Ausnahme catch-all das auf der Basis
Exception
Klasse - sollten Sie explizite exception-Klassen in Ihrem code.Während
Field.get()
in der Regel funktioniert wie erwartet, das gleiche kann nicht gesagt werden, fürField.set()
und seine Freunde. Genauer gesagt ist es gerne ändern, den Wert einer Konstante (z.B. einefinal
Feld oder einprivate
Feld, die nie geändert in der Klasse Methoden), aber aufgrund der ständigen inlining wird der alte Wert kann weiterhin verwendet werden.Vorausgesetzt, diese Konstanten werden in statische Felder:
Ausgabe:
Beachten Sie, dass zu erhalten der Wert eines statischen Feldes, die Sie liefern
null
als die arg.Erfahren Sie über die Modifikatoren, die über die Klasse und nicht das Objekt.
http://download.oracle.com/javase/tutorial/reflect/class/classModifiers.html