文档章节

实现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
广州
程序员
私信 提问
Jmockata-4.0.0 发布,随机模拟 Java 数据

Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。 支持丰富多样的数据类型模拟,包括:Java基本类型、字符串、枚举、日期、数组、多维数组...

寻觅一只耳朵
2018/12/02
0
0
Java并发之ThreadLocal使用和源码分析

本篇文章首先给出了ThreadLocal常用的方法,并举例来说明ThreadLocal的使用。然后分析了ThreadLocal的源代码中的get()方法,初始化方法,ThreadLocalMap的实现等来理解ThreadLocal的原理。 ...

第四单元
2018/12/24
0
0
探究ThreadLocal原理(基于Java8)

线程封闭 避免并发最简单的方法就是线程封闭。 即把对象封装到一个线程里,只有这一个线程能看到此对象。那么这个对象就算不是线程安全的也不会出现任何安全问题。 使用ThreadLocal是实现线程...

芥末无疆
2018/02/10
0
0
Java 源码解析实战 - ThreadLocal 原理

说起CS游戏,应该是每个中二少年的年少回忆了. 游戏开始时,每个人能够领到一把枪,枪把上有三个数字:子弹数、杀敌数、自己的命数,为其设置的初始值分别为1500、0、10. 设战场上的每个人都是一...

芥末无疆
昨天
0
0
【转】115个Java面试题和答案——终极列表

本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力。下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Jav...

一只死笨死笨的猪
2014/09/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《傲慢与偏见》的读书笔记与读后感作文2400字

《傲慢与偏见》的读书笔记与读后感作文2400字: 作者:孙苑馨;笔者按:读书这个习惯是我爸妈养出来的。小时候父母赚的钱除了吃饭穿衣剩下的就是买书了,他们除了买各种新鲜出版的文艺派图书...

原创小博客
23分钟前
1
0
oozie job 的挂了监控报警或重启

oozie Coordinator 的job 和actioni状态很多,但好像不支持设置某状态如failed后30分钟后自动重新拉启,因他的条件只有几种:触发条件可以是一个时间频率、一个dataset实例是否可用,或者可能...

hblt-j
42分钟前
1
0
python精简笔记-[6]-[if,for,while]语句

1.if 条件判断 语法: if 判断条件: 执行语句……elif 判断条件:    执行语句……elif 判断条件:    执行语句……else: 执行语句…… 实例1: n = input("请输...

平头哥-Enjoystudy
45分钟前
0
0
RxJava 是如何实现线程切换的(上)

前言 通过前一篇的从观察者模式出发,聊聊RxJava,我们大致理解了RxJava的实现原理,在RxJava中可以非常方便的实现不同线程间的切换。subscribeOn 用于指定上游线程,observeOn 用于指定下游线...

亭子happy
今天
2
0
想晋级高级工程师只知道表面是不够的!Git内部原理介绍

本文由云+社区发表 作者:腾讯工蜂用户:王二卫 从不一样的视角了解git,以便更好的使用git 一、git & git 版本库认识 git 是一个内容寻址的文件系统,其核心部分是一个简单的键值对数据库(...

腾讯云加社区
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部