J'ai une classe et je veux trouver tous ses champs publics (pas les méthodes). Comment puis-je faire ceci?
Merci!
java
reflection
ufk
la source
la source
Réponses:
renvoie un tableau de toutes les variables publiques de la classe.
getFields()
renvoyer les champs dans toute la classe-héritage. Si vous souhaitez que les champs soient définis uniquement dans la classe en question, et non dans ses superclasses, utilisezgetDeclaredFields()
et filtrezpublic
celles-ci avec l'Modifier
approche suivante :Le
YourClassName.class
littéral représente en fait un objet de typejava.lang.Class
. Consultez sa documentation pour des méthodes de réflexion plus intéressantes.La
Field
classe ci-dessus estjava.lang.reflect.Field
. Vous pouvez jeter un œil à l'ensemble dujava.lang.reflect
package.la source
https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html contient également des graphiques pour localiser les méthodes et les constructeurs.
la source
Vous pouvez utiliser l'un des deux en fonction de vos besoins:
Pour filtrer uniquement les champs publics de la liste ci-dessus (en fonction des exigences), utilisez le code ci-dessous:
la source
Comme mentionné par quelques utilisateurs, le code ci-dessous peut aider à trouver tous les champs d'une classe donnée.
Cependant, une approche plus intéressante est ci-dessous:
Avec l'aide de la bibliothèque Jackson, j'ai pu trouver toutes les propriétés de classe de type String / integer / double, et les valeurs respectives dans une classe Map. ( sans utiliser l'API Reflections! )
la source