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