J'ai trouvé un moyen d'obtenir des membres hérités via class.getDeclaredFields();
et d'accéder aux membres privés via class.getFields()
Mais je recherche des champs hérités privés. Comment puis-je atteindre cet objectif?
109
J'ai trouvé un moyen d'obtenir des membres hérités via class.getDeclaredFields();
et d'accéder aux membres privés via class.getFields()
Mais je recherche des champs hérités privés. Comment puis-je atteindre cet objectif?
Réponses:
Cela devrait montrer comment le résoudre:
(Ou
Class.getDeclaredFields
pour un tableau de tous les champs.)Production:
la source
getSuperclass()
jusqu'à ce que vous atteignieznull
si vous voulez aller plus haut.getDeclaredFields()[0]
ou negetDeclaredField("i")
répétez-vous pas l'[0]
accès au tableau dans les deux instructions suivantes?getDeclaredFields
. La réponse a été mise à jour.La meilleure approche ici consiste à utiliser le modèle de visiteur pour trouver tous les champs de la classe et toutes les super classes et exécuter une action de rappel sur eux.
la mise en oeuvre
Spring a une belle classe Utility
ReflectionUtils
qui fait exactement cela: il définit une méthode pour boucler sur tous les champs de toutes les super classes avec un rappel:ReflectionUtils.doWithFields()
Documentation:
Exemple de code:
Production:
la source
Cela va le faire:
Si vous utilisez un outil de couverture de code comme EclEmma , vous devez faire attention: ils ajoutent un champ caché à chacune de vos classes. Dans le cas d'EclEmma, ces champs sont marqués comme synthétiques et vous pouvez les filtrer comme ceci:
la source
(basé sur cette réponse)
la source
En fait, j'utilise une hiérarchie de type complexe afin que votre solution ne soit pas complète. J'ai besoin de faire un appel récursif pour obtenir tous les champs hérités privés. Voici ma solution
la source
J'avais besoin d'ajouter la prise en charge des champs hérités pour les plans dans Model Citizen . J'ai dérivé cette méthode qui est un peu plus concise pour récupérer les champs d'une classe + les champs hérités.
la source
la source