如何使用反射遍历子类中的字段

时间:2013-05-13 15:47:27

标签: java android reflection

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

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());
    }
}

谢谢!

2 个答案:

答案 0 :(得分:1)

getFields方法会返回此类及其超类的所有公共字段。

如果你想要这个类及其超类的所有字段,只需使用getSuperClass()并调用相同的方法。

正如@Sotirios的评论所暗示的那样,你可以在层次结构中一直这样做。

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

答案 1 :(得分:1)

如果您想获得班级的所有公共字段,请使用getFields。 java文档说:

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

查看here以获取java.lang.Class的文档。