O lo que es lo mismo, mediante Reflection, la obtención de todos los campos de una clase incluidos los de la clase padre.

Supongamos que tenemos dos clases, una clase A, y una clase B que extiende de A.

public class A {
    private String attriA;
}

public class B extends A {
    private String attriB;
}

Si sólo quisiera obtener los campos de la clase B, sin los de la clase padre A, lo haríamos sencillamente en una supuesta ejecución.

B b = new B();
Class klassB = b.getClass();

y para obtener los campos:

Fields[] fieldB = klassB.getDeclaredFields();

Ahora bien, al tener un padre, tendremos que recorrer también los campos del padre, que solucionamos con implementando un método que nos devolverá los campos del padre y del hijo.

Sólo los campos del padre.

Fields[] fieldA = klassB.getSuperclass()getDeclaredFields();

Y para obtener todos los campos, añadimos a un ArrayList tanto los del hijo como los del padre (si lo tuviera)

 List<Field> fields = new ArrayList<Field>();
        fields.addAll(Arrays.asList(klass.getDeclaredFields()));
        if (klass.getSuperclass() != null) {
            fields.addAll(Arrays.asList(getAllFields(klass.getSuperclass())));
        }
Copyright © 2016 runando