我有一个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));
}

Java相关问答推荐

在未跨多次运行重写过go 的数据的情况下将数据写入到SON文件时遇到问题(使用Jackson)

判断大写字符串的Java方法总是返回假

Java 21虚拟线程会解决转向react 式单线程框架的主要原因吗?

在Java中,在单个逻辑行中连接列表和单个元素的正确方法是什么?

将带有js文件的 bootstrap 程序导入maven项目时出错

测试期间未执行开放重写方法

Com.google.firebase.database.DatabaseException:无法将类型为java.lang.Boolean的值转换为字符串.这是关于什么的?

更新AWS凭据

测试何时使用Mockito强制转换对象会导致ClassCastException

通过Spring Security公开Spring Boot执行器端点

是否为计划任务补偿系统睡眠?

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

深度优先搜索实现:算法只向右搜索

接受类及其接口的Java类型(矛盾)

如何设计包含已知和未知键值对映射的Java类?

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

AspectJ编织外部依赖代码,重新打包jar并强制依赖用户使用它

如何使JOOQ渐变脚本不重新创建表未更改的类?

ControlsFX RangeSlider在方向垂直时滞后

如何在更改分辨率时将鼠标坐标计算为世界坐标