使用 Java 反射检索继承的属性名称/值

新手上路,请多包涵

我有一个 Java 对象“ChildObj”,它是从“ParentObj”扩展而来的。现在,是否可以使用 Java 反射机制检索 ChildObj 的所有属性名称和值,包括继承的属性?

Class.getFields 给了我公共属性的数组, Class.getDeclaredFields 给了我所有字段的数组,但它们都不包括继承的字段列表。

还有什么方法可以检索继承的属性吗?

原文由 Veera 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 466
2 个回答

不,你需要自己写。这是一个在 Class.getSuperClass() 上调用的简单递归方法:

 public static List<Field> getAllFields(List<Field> fields, Class<?> type) {
    fields.addAll(Arrays.asList(type.getDeclaredFields()));

    if (type.getSuperclass() != null) {
        getAllFields(fields, type.getSuperclass());
    }

    return fields;
}

@Test
public void getLinkedListFields() {
    System.out.println(getAllFields(new LinkedList<Field>(), LinkedList.class));
}

原文由 dfa 发布,翻译遵循 CC BY-SA 3.0 许可协议

    public static List<Field> getAllFields(Class<?> type) {
        List<Field> fields = new ArrayList<Field>();
        for (Class<?> c = type; c != null; c = c.getSuperclass()) {
            fields.addAll(Arrays.asList(c.getDeclaredFields()));
        }
        return fields;
    }

原文由 Esko Luontola 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题