我有一个Java对象"ChildObj",它是从"ParentObj"扩展而来的.现在,是否可以使用Java反射机制检索ChildObj的所有属性名称和值,包括继承的属性?
Class.getFields给出了公共属性的数组,Class.getDeclaredFields给出了所有字段的数组,但没有一个包含继承字段列表.
还有什么方法可以检索继承的属性吗?
我有一个Java对象"ChildObj",它是从"ParentObj"扩展而来的.现在,是否可以使用Java反射机制检索ChildObj的所有属性名称和值,包括继承的属性?
Class.getFields给出了公共属性的数组,Class.getDeclaredFields给出了所有字段的数组,但没有一个包含继承字段列表.
还有什么方法可以检索继承的属性吗?
不,你需要自己写.这是一个简单的递归方法,名为on 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));
}