java对象转换map

java对象转换map背景介绍原理说明反射概念功能作用实现方式方法介绍实例展示对象转MAP背景介绍  今天在项目研发的过程中遇到这样一个需求,在一个统一处理类的入口要将所有后面处理流程需要用到的值统一塞进上下文的MAP对象中,这其中就包括了一持久层的DO对象。  如果对于对象进行逐个遍历是可以实现这个需求,但代码量比较大,所以一直在寻求一种比较合理的处理方式。后来发现可以通过反射的方式实现这个功能。原理

大家好,又见面了,我是你们的朋友全栈君。

背景介绍

  今天在项目研发的过程中遇到这样一个需求,在一个统一处理类的入口要将所有后面处理流程需要用到的值统一塞进上下文的MAP对象中,这其中就包括了一持久层的DO对象。
  如果对于对象进行逐个遍历是可以实现这个需求,但代码量比较大,所以一直在寻求一种比较合理的处理方式。后来发现可以通过反射的方式实现这个功能。

原理说明

反射概念

  • 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

  • 对于任意一个对象,都能够调用它的任意一个方法和属性;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

功能作用

  • 在运行时可以动态获取一个对象属于哪个类

  • 在运行时可以动态创建一个类的对象

  • 在运行时可以获取类的属性和方法

  • 在运行时可以调用对象的任何方法

  • 可以实现动态代理

实现方式

  • 通过Object类的getClass方法
    Class cla = obj.getClass
  • 通过对象实例方法获取对象
    Class cla = String.class
  • 通过Class.forName()方法
    Class cla = Class.forName(xxx.xxx.Student)

方法介绍

关键字 含义
getDeclaredMethods() 获取所有的方法
getDeclareFields() 获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段
getFields() 获得某个类的所有的公共(public)的字段,包括父类中的字段
getDeclaredField(String name) 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段
getReturnType() 获得方法的放回类型
getParameterTypes() 获得方法的传入参数类型
getDeclaredMethod(“方法名”,参数类型.class,……) 获得特定的方法
构造方法关键字 含义
getDeclaredConstructors() 获取所有的构造方法
getDeclaredConstructor(参数类型.class,……) 获取特定的构造方法
父类和父接口 含义
getSuperclass() 获取某类的父类
getInterfaces() 获取某类实现的接口

实例展示

参考实例 反射实例链接

对象转MAP

  • 创建测试对象
package source.reflect;

public class TestReflect { 
   

    private String no;

    private String name;

    private int age;



    public TestReflect(String no, String name, int age) {
        super();
        this.no = no;
        this.name = name;
        this.age = age;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


}
  • 通过反射将对象转换为Map
package source.reflect;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class TestObjToMap { 
   


    public static Map<String, Object> convertObjToMap(Object obj) throws Exception{

        Map<String, Object> map = new HashMap<String, Object>();

        Field[] fields = obj.getClass().getDeclaredFields();

        for(int i = 0; i < fields.length; i++){

            Field field = obj.getClass().getDeclaredField(fields[i].getName());
            field.setAccessible(true);
            Object value = field.get(obj);

            map.put(fields[i].getName(), value);
        }

        return map;
    }


    public static void main(String[] args) throws Exception {

        TestReflect testReflect = new TestReflect("1", "test", 20);

        Map<String, Object> map = convertObjToMap(testReflect);

        System.out.println(map);
    }

}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131985.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • javaquartz定时任务设置时间,太牛了![通俗易懂]

    javaquartz定时任务设置时间,太牛了![通俗易懂]前言其实前几篇文章已经写了好多有关于Spring源码的文章,事实上,很多同学虽然一直在跟着阅读、学习这些Spring的源码教程,但是一直都很迷茫,这些Spring的源码学习,似乎只是为了面试吹逼用,我大概问过一些同学,很多同学看了很长时间的Spring但是依旧不知道如何将这些学到的知识运用到实际的案例上!其实这个问题很好解决,如果你在开发中很少能够遇见需要Spring扩展时,不妨把目光放到一些依托于Spring的项目,看看它们是如何运用Spring的扩展点的。对于Spring的学习,我认为最终真正学会的

    2022年7月13日
    35
  • 子查询关键字-ALL、ANY、SOME、IN、EXISTS「建议收藏」

    子查询关键字-ALL、ANY、SOME、IN、EXISTS「建议收藏」子查询关键字-ALL、ANY、SOME、IN、EXISTSALLselectfromwherec>all(查询语句)等价于selectfromwherec>result1andc>result2andc>result3特点: 1:all与子查询返回的所有值比较为true则返回true 2:ALL可以与=><>=<=<>结合使用 3:all表示指定列中的值必须要大于子查询集中的每一个值

    2022年7月27日
    11
  • 钓鱼邮件案例_钓鱼诈骗案例

    钓鱼邮件案例_钓鱼诈骗案例防网络诈骗分析

    2022年8月24日
    9
  • 常见图片文件格式简析下载_图片的文件格式有哪些

    常见图片文件格式简析下载_图片的文件格式有哪些“常见”:此处指BMPJPEGGIFPNG四种。软件:Windows画图(除了Photoshop,我最喜欢的编辑器,简单粗暴)HxDBMPBMP文件分为4部分:bmp文件头(bmpfileh

    2022年8月3日
    9
  • 计算机网络面试题总结

    计算机网络面试题总结一OSI与TCP/IP各层的结构与功能,都有哪些协议五层协议的体系结构1应用层域名系统HTTP协议2运输层运输层主要使用以下两种协议UDP的主要特点TCP的主要特点3网络层4数据链路层5物理层总结一下二TCP三次握手和四次挥手(面试常客)为什么要三次握手为什么要传回SYN传了SYN,为啥还要传ACK为什么要四次挥手…

    2022年5月11日
    39
  • c语言中malloc的作用,malloc函数-malloc函数,详解

    c语言中malloc的作用,malloc函数-malloc函数,详解本教程分享:《malloc函数》,c语言malloc函数是什么意义开辟内存。比如int*p;p=(int*)malloc(100*sizeof(int));它开辟100个int单元,即400字节。然后p指向第一个元素。之后也可以用p[0],p[1]malloc函数怎么使用malloc函数怎么使用,具体是什么含义啊,请详细讲解需要包含头文件:#include或#include函数声明(函…

    2022年5月29日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号