• java 反射之获取泛型对象的所有字段与对应的值(包括父类的)


    上代码:

    public static void main(String[] args) throws IntrospectionException {
            SysUser obj = new SysUser();
            obj.setId(1L);
            obj.setUserName("测试");
            obj.setCreatedDate(LocalDateTime.now());
    
            Class<?> clazz = SysUser.class;
            Field[] tableFields = clazz.getDeclaredFields();
            Class<?> superClazz = clazz.getSuperclass();
            if (superClazz.equals(Object.class)) {
                System.out.println("没有父类");
            } else {
                Field[] tableSuperFields = superClazz.getDeclaredFields();
                Field[] superFields = new Field[tableFields.length + tableSuperFields.length];
                System.arraycopy(tableFields, 0, superFields, 0, tableFields.length);
                System.arraycopy(tableSuperFields, 0, superFields, tableFields.length, tableSuperFields.length);
                Field[] allFields = getSuperClassFields(superFields, superClazz);
                for (int i = 0; i < allFields.length; i++) {
                    PropertyDescriptor pd = new PropertyDescriptor(allFields[i].getName(), clazz);
                    Method getMethod = pd.getReadMethod();//获得get方法
                    Object fieldValue = ReflectionUtils.invokeMethod(getMethod, obj);
                    if(fieldValue == null){
                        continue;
                    }
    
                    System.out.println(allFields[i].getName() + "的值:" +  fieldValue.toString());
                }
            }
        }
    
    //获取父类的所有字段
    private static Field[] getSuperClassFields(Field[] tableFields, Class<?> clazz) { Class<?> superClazz = clazz.getSuperclass(); if (superClazz.equals(Object.class)) { return tableFields; } Field[] tableSuperFields = superClazz.getDeclaredFields(); Field[] c = new Field[tableFields.length + tableSuperFields.length]; System.arraycopy(tableFields, 0, c, 0, tableFields.length); System.arraycopy(tableSuperFields, 0, c, tableFields.length, tableSuperFields.length); getSuperClassFields(c, superClazz); return c; }

    输出结果:

  • 相关阅读:
    S3C2440实现dm9000网卡驱动程序移植
    IMX257虚拟网卡vnet驱动程序
    ram_flash驱动
    S3C2440 nor_flash驱动程序
    Java 打印* 三角形
    Java系列学习说明
    java案例1,打印hello java
    zabbixproxy安装
    python鉴黄程序
    mssql发布订阅事项
  • 原文地址:https://www.cnblogs.com/JoeyWong/p/10406875.html
Copyright © 2020-2023  润新知