zoukankan      html  css  js  c++  java
  • 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; }

    输出结果:

  • 相关阅读:
    C#:友元程序集
    C#/Net代码精简优化技巧(3)
    Net4.0AspNet中URL重写的改进
    JQuery boxy插件的确认框在AspNet中的应用
    在数据库中将字表中的多行合并到一列中
    软件推荐:磁盘搜索软件Everything
    Net4.0对HTML净化的处理
    C#/Net代码精简优化技巧(2)
    推荐两款富文本编辑器:NicEdit和Kindeditor
    ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)验证码实现和底层修改
  • 原文地址:https://www.cnblogs.com/JoeyWong/p/10406875.html
Copyright © 2011-2022 走看看