public Field[] getFields() throws SecurityException
Renvoie un tableau contenant des objets Field reflétant tous les champs publics accessibles de la classe ou de l'interface représentée par cet objet Class. Les éléments du tableau renvoyés ne sont pas triés et ne sont pas dans un ordre particulier. Cette méthode retourne un tableau de longueur 0 si la classe ou l'interface n'a pas de champs publics accessibles, ou si elle représente une classe de tableau, un type primitif ou void.
Plus précisément, si cet objet Class représente une classe, cette méthode retourne les champs publics de cette classe et de toutes ses superclasses. Si cet objet Class représente une interface, cette méthode retourne les champs de cette interface et de toutes ses super-interfaces.
Le champ de longueur implicite pour la classe de tableau n'est pas reflété par cette méthode. Le code utilisateur doit utiliser les méthodes de la classe Array pour manipuler les tableaux.
public Field[] getDeclaredFields() throws SecurityException
Renvoie un tableau d'objets Field reflétant tous les champs déclarés par la classe ou l'interface représentée par cet objet Class. Cela inclut les champs public, protégé, par défaut (package) et privé , mais exclut les champs hérités . Les éléments du tableau renvoyés ne sont pas triés et ne sont pas dans un ordre particulier. Cette méthode renvoie un tableau de longueur 0 si la classe ou l'interface ne déclare aucun champ, ou si cet objet Class représente un type primitif, une classe de tableau ou void.
Et si j'ai besoin de tous les champs de toutes les classes parentes? Un certain code est nécessaire, par exemple à partir de https://stackoverflow.com/a/35103361/755804 :
public static List<Field> getAllModelFields(Class aClass) {
List<Field> fields = new ArrayList<>();
do {
Collections.addAll(fields, aClass.getDeclaredFields());
aClass = aClass.getSuperclass();
} while (aClass != null);
return fields;
}
getField
peut obtenir un champ hérité d'une superclasse maisgetDeclaredField
ne le peut pas.getDeclaredField
se limiter à la classe sur laquelle vous appelez la fonction.