5 votes

Java Reflection - Obtenir des champs de la sous-classe et de la super-classe

J'utilise des classes de haricots héritées pour mon projet. Ici, certaines des super classes seront vides et les sous classes pourront avoir des champs et certaines des sous classes seront vides et les super classes pourront avoir des champs.

Mon besoin est de récupérer tous les champs privés / publics de la classe Sub ainsi que tous les champs publics / protégés de la classe Super.

J'ai essayé d'y parvenir ci-dessous. Mais je n'ai pas réussi à satisfaire mes exigences. Merci de me donner quelques suggestions pour y parvenir.

Field fields [] = obj.getClass().getSuperclass().getDeclaredFields();

Si j'utilise le code ci-dessus, je ne peux obtenir que les champs de la classe Super.

Field fields [] = obj.getClass().getFields();

Si j'utilise le code ci-dessus, je peux obtenir tous les champs de la sous-classe et de la super-classe.

Field fields [] = obj.getClass().getDeclaredFields();

Si j'utilise le code ci-dessus, je peux obtenir tous les champs publics et privés de la classe Sub.

6voto

jqno Points 7831

Vous devrez itérer sur toutes les superclasses de votre classe, comme ceci :

private List<Field> getInheritedPrivateFields(Class<?> type) {
    List<Field> result = new ArrayList<Field>();

    Class<?> i = type;
    while (i != null && i != Object.class) {
        Collections.addAll(result, i.getDeclaredFields());
        i = i.getSuperclass();
    }

    return result;
}

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