Ich habe eine Klasse und möchte alle öffentlichen Felder (keine Methoden) finden. Wie kann ich das machen?
Vielen Dank!
java
reflection
ufk
quelle
quelle
Antworten:
Gibt ein Array aller öffentlichen Variablen der Klasse zurück.
getFields()
Geben Sie die Felder in der gesamten Klassenerbschaft zurück. Wenn Sie möchten, dass die Felder nur in der betreffenden Klasse und nicht in ihren Oberklassen definiert werden, verwendengetDeclaredFields()
und filtern Sie die Felderpublic
mit dem folgendenModifier
Ansatz:Das
YourClassName.class
Literal repräsentiert tatsächlich ein Objekt vom Typjava.lang.Class
. Weitere interessante Reflexionsmethoden finden Sie in den Dokumenten.Die
Field
obige Klasse istjava.lang.reflect.Field
. Sie können sich das gesamtejava.lang.reflect
Paket ansehen .quelle
https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html enthält auch Diagramme zum Auffinden von Methoden und Konstruktoren.
quelle
Sie können je nach Bedarf eine der beiden Optionen verwenden:
Verwenden Sie den folgenden Code, um nur die öffentlichen Felder aus der obigen Liste (basierend auf den Anforderungen) zu filtern:
quelle
Wie von wenigen Benutzern erwähnt, kann der folgende Code dazu beitragen, alle Felder in einer bestimmten Klasse zu finden.
Ein interessanterer Ansatz ist jedoch unten:
Mit Hilfe der Jackson-Bibliothek konnte ich alle Klasseneigenschaften vom Typ String / integer / double und die entsprechenden Werte in einer Map-Klasse finden. ( ohne Reflexionen API zu verwenden! )
quelle