obj = obj.getClass().getSuperclass().cast(obj);
This line does not do what you expect it to do. Casting an Object
does not actually change it, it just tells the compiler to treat it as something else.
E.g. you can cast a List
to a Collection
, but it will still remain a List
.
However, looping up through the super classes to access fields works fine without casting:
Class<?> current = yourClass;
while(current.getSuperclass()!=null){ // we don't want to process Object.class
// do something with current's fields
current = current.getSuperclass();
}
BTW, if you have access to the Spring Framework, there is a handy method for looping through the fields of a class and all super classes:
ReflectionUtils.doWithFields(baseClass, FieldCallback)
(also see this previous answer of mine: Access to private inherited fields via reflection in Java)