我有一个Java对象’ChildObj’,它是从’ParentObj’扩展而来的。现在,是否可以使用Java反射机制来检索ChildObj的所有属性名称和值,包括继承的属性?
Class.getFields为我提供了公共属性的数组,而Class.getDeclaredFields为我提供了所有字段的数组,但是它们都不包含继承的字段列表。
有没有办法检索继承的属性呢?
不,你需要自己编写。这是在Class.getSuperClass()上调用的简单递归方法:
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)); }