143 votes

Quelle est la différence entre getFields et getDeclaredFields en réflexion Java

Je suis un peu confus au sujet de la différence entre le getFields méthode et l' getDeclaredFields méthode lors de l'utilisation de Java réflexion.

J'ai lu qu' getDeclaredFields vous donne accès à tous les champs de la classe et qu' getFields seulement des rendements des champs publics. Si c'est le cas, pourquoi ne pas vous juste de toujours utiliser getDeclaredFields?

Quelqu'un peut-il donner des précisions sur ce point, et expliquer la différence entre les deux méthodes, et quand/pourquoi vous voulez utiliser l'un plutôt que l'autre?

204voto

John B Points 17042

getFields , donnera à tous public champ de l'ensemble de la hiérarchie de classe.

getDeclaredFields donnera tous les domaines (pas question de l'accessibilité), mais seulement de la classe (pas de classes de base)

EDIT: pour obtenir tous les champs en haut de la hiérarchie, j'ai écrit ce qui suit:

public static Iterable<Field> getFieldsUpTo(@Nonnull Class<?> startClass, 
                                   @Nullable Class<?> exclusiveParent) {

   List<Field> currentClassFields = Lists.newArrayList(startClass.getDeclaredFields());
   Class<?> parentClass = startClass.getSuperclass();

   if (parentClass != null && 
          (exclusiveParent == null || !(parentClass.equals(exclusiveParent)))) {
     List<Field> parentClassFields = 
         (List<Field>) getFieldsUpTo(parentClass, exclusiveParent);
     currentClassFields.addAll(parentClassFields);
   }

   return currentClassFields;
}

L' exclusiveParent classe est prévue pour empêcher l'extraction de champs à partir d' Object. Si peut-être null si vous NE voulez pas l' Object champs.

Pour claify, Lists.newArrayList vient de Goyave.

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: