110 votes

Obtenir tous les noms de variables dans une classe

J'ai une classe et je veux trouver toutes ses classes. champs publics (pas de méthodes). Comment puis-je faire cela ?

1 votes

Vous devriez pouvoir le faire en utilisant API de réflexion .

153voto

Bozho Points 273663
Field[] fields = YourClassName.class.getFields();

renvoie un tableau de toutes les variables publiques de la classe.

getFields() retourner les champs dans toute la classe-héritage. Si vous voulez que les champs soient définis uniquement dans la classe en question, et non dans ses superclasses, utilisez getDeclaredFields() et de filtrer les public avec les éléments suivants Modifier approche :

Modifier.isPublic(field.getModifiers());

El YourClassName.class représente en fait un objet de type java.lang.Class . Consultez sa documentation pour des méthodes de réflexion plus intéressantes.

El Field La classe ci-dessus est java.lang.reflect.Field . Vous pouvez jeter un coup d'œil à l'ensemble java.lang.reflect paquet.

3 votes

Juste une note - initialement ma réponse contenait une déclaration erronée, pourtant elle a été upvoted un certain nombre de fois. Veuillez lire plus attentivement ;)

1 votes

@downvoter - l'erreur était avant. Si vous en voyez une maintenant, merci de la partager.

0 votes

Cette solution est-elle lente ? ou peut-on l'utiliser librement ?

57voto

cellepo Points 124

https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html dispose également de tableaux permettant de localiser les méthodes et les constructeurs.

enter image description here

20voto

mav3n Points 166

Vous pouvez utiliser l'un des deux en fonction de vos besoins :

Field[] fields = ClassName.class.getFields(); // returns inherited members but not private members.
Field[] fields = ClassName.class.getDeclaredFields(); // returns all members including private members but not inherited members.

Pour filtrer uniquement les champs publics de la liste ci-dessus (en fonction des besoins), utilisez le code ci-dessous :

List<Field> fieldList = Arrays.asList(fields).stream().filter(field -> Modifier.isPublic(field.getModifiers())).collect(
    Collectors.toList());

7voto

Ahmed Kotb Points 2492

Voir este Excellent tutoriel de réflexion java par ibm pour obtenir tous les constructeurs, variables et même méthodes.

3voto

Crozin Points 22346

Vous devriez pouvoir le faire en utilisant API de réflexion .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X