如何使用反射循环访问子类中的字段

问题描述:

我需要遍历抽象基类的子类中的公共属性。我之前使用过反射,但现在我还需要检索超类中的字段。以下方法仅返回子类中的那些字段,但不返回超类。如何访问基类的成员呢?如何使用反射循环访问子类中的字段

private <T> void inspectClass(Class<T> cls){ 
    Field[] fields = cls.getDeclaredFields(); 
    Log.d("FIELDS ARRAY", cls.toString()); 
    for(Field f : fields){ 
     Log.d("FIELD NAME", f.toString()); 
    } 
} 

谢谢!

+0

使用'while(Class#getSuperClass()!= null)'循环父类并获取它们的字段。 – 2013-05-13 15:50:24

有一个getFields方法将返回此类及其超类的所有public字段。

如果您想要此类及其超类的所有字段,请使用getSuperClass()并调用相同的方法。

正如@Sotirios的评论所建议的那样,您可以继续在层次结构中一直这样做。

Class<?> clazz = cls.getSuperclass(); 
    while (clazz != null) { 
     // Print fields. 
     clazz = clazz.getSuperclass(); 
    } 

如果您希望获得班级的所有公共领域,您应该使用getFields。 Java文档说:

Returns an array containing Field objects reflecting all the accessible public 
fields of the class or interface represented by this Class object. 

herejava.lang.Class的文档。