文档章节

实现Java 对象转Map 再也不怕继承了

karlwanghn
 karlwanghn
发布于 2017/07/26 10:39
字数 217
阅读 8
收藏 0

/**
     * 获取一个类和其父类的所有属性
     * 
     * @param clazz
     * @return
     */
    public static List<Field> findAllFieldsOfSelfAndSuperClass(Class clazz) {
        Field[] fields = null;
        List fieldList = Lists.newArrayList();
        while (true) {
            if (clazz == null) {
                break;
            } else {
                fields = clazz.getDeclaredFields();
                for (int i = 0; i < fields.length; i++) {
                    fieldList.add(fields[i]);
                }
                clazz = clazz.getSuperclass();
            }
        }
        return fieldList;
    }

 

 

/**
     * 将对象转Map 
     * @param obj 待转对象
     * @return
     */
   public static  Map<String, Object> getValueMap(Object obj) {  
        
        Map<String, Object> map = new HashMap<String, Object>();  
        // System.out.println(obj.getClass());  
        // 获取f对象对应类中的所有属性域  
        List<Field> list=findAllFieldsOfSelfAndSuperClass(obj.getClass());
           for (Field field : list) {
          
            String varName = field.getName();  
            try {  
                // 获取原来的访问控制权限  
                boolean accessFlag = field.isAccessible();  
                // 修改访问控制权限  
                field.setAccessible(true);  
                // 获取在对象f中属性fields[i]对应的对象中的变量  
                Object o = field.get(obj);  
                if (o != null)  
                    map.put(varName, o);  
                // System.out.println("传入的对象中包含一个如下的变量:" + varName + " = " + o);  
                // 恢复访问控制权限  
                field.setAccessible(accessFlag);  
            } catch (IllegalArgumentException ex) {  
                ex.printStackTrace();  
            } catch (IllegalAccessException ex) {  
                ex.printStackTrace();  
            }  
        }  
        return map;  
  
    }  

© 著作权归作者所有

共有 人打赏支持
karlwanghn
粉丝 1
博文 11
码字总数 2417
作品 0
广州
程序员
私信 提问
多线程 start 和 run 方法到底有什么区别?

昨天栈长介绍了《Java多线程可以分组,还能这样玩!》线程分组的妙用。今天,栈长会详细介绍 Java 中的多线程 start() 和 run() 两个方法,Java 老司机请跳过,新手或者对这两个不是很理解的...

Java技术栈
11/13
0
0
ThreadLocal的原理与使用

通过源码解读ThreadLocal类的实现 ThreadLocal类提供了以下几个方法 get()方法是用来获取ThreadLocal在当前线程中保存的变量副本 set()用来设置当前线程中变量的副本 remove()用来移除当前线...

凌晨一点
08/30
0
0
java一些基础问题(听说是java应聘者老被问的问题!)

1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × priv...

独钓渔
2013/07/31
0
0
Java序列化与JSON序列化大比拼

一、背景 有项目需要传输Map结构的数据,有人倾向用Java序列化来做,有人倾向用JSON的序列化来做。所以我们还是比比吧。 Java观点:Object2Object,使用时简单快速。 JSON观点:JSON格式与语...

NoahX
2013/03/10
0
20
Objective-C入门(三)Foundation框架初探

Foundation之于Objective-C就好比Java中SDK类库之于Java。 这个框架提供了基本的Objective-C的类,最重要的根类,NSObject,它定义了基本的对象行为。 框架包括了各种基本数据类型、集合,操...

李海珍
2013/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式锁的实现

redis实现分布式锁 方法1:普通实现方案 实现方式: 使用指令: set key 随机值 ex 5 nx.意思是当key不存在的时候设置key. 如果key存在返回OK,否则返回nil. 实现过程: 1.执行命令set key true ...

grace_233
33分钟前
3
0
解决CKEditor 4 富文本编辑器在图片组件无法显示[上传]选项卡的相关问题

关于解决CKEditor 4 富文本编辑器在图片组件无法显示[上传]选项卡的相关问题。 本文可能会对以下现象得以解决: 图片上传组件,没有 [上传] 选项卡。 资源无法加载 [imgupload] ( Uncaught E...

Eller
36分钟前
2
0
限制php解析、user_agent、php相关配置

11月20日任务 11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31 php相关配置 11.28、限定某个目录禁止解析php 核心配置文件内容 <Directory /data/wwwroot/www.123.com/upl...

zgxlinux
41分钟前
4
0
博客园首页新随笔联系订阅管理 随笔

注解Annotation实现原理与自定义注解例子 什么是注解? 对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的...

onedotdot
58分钟前
4
1
Spring boot + redis 用RedisTemlate实现简单的String key value 操作

springboot集成redis, 简单的key, value缓存操作. 1. application-local.properties # redis on local#spring.redis.port=6379#spring.redis.host=localhost#spring.redis.password=......

园领T
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部