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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vim复制粘贴_linux粘贴复制快捷键

    vim复制粘贴_linux粘贴复制快捷键1.选定文本块。使用v进入可视模式,移动光标键选定内容。2.复制的命令是y,即yank(提起),常用的命令如下:   y     在使用v模式选定了某一块的时候,复制选定块到缓冲区用;   yy   复制整行(nyy或者yny,复制n行,n为数字);&n…

    2022年9月22日
    0
  • plsql 中文乱码 字符集解决方案「建议收藏」

    plsql 中文乱码 字符集解决方案「建议收藏」1.环境变量,NLS_LANG:SIMPLIFIEDCHINESE_CHINA.ZHS16GBK2.如果想转换为UTF8字符集,可以赋予“NLS_LANG”为“AMERICAN_AMERICA.UTF8”3.oracle查看数据库字符集select*fromnls_database_parameters,其来源于props$,是表示数据库的字符集。客户端字符集环境

    2022年6月10日
    27
  • Ubuntu命令行下树莓派连接WiFi操作方法

    Ubuntu命令行下树莓派连接WiFi操作方法第一种方法:通过配置/etc/network/interfaces文件实现终端输入sudovim/etc/network/interfaces修改后文件内容如下:autoloifaceloinetloopbackifaceeth0inetdhcpautowlan0allow-hotplugwlan0ifacewlan0inetdhcpwpa-ssid”你的wifi名称”wpa-p

    2022年6月10日
    60
  • c语言的条件运算符,条件运算符c语言[通俗易懂]

    c语言的条件运算符,条件运算符c语言[通俗易懂]C语言中条件运算符是什么意思C语言中条件运算符是什么意思?:是什么意思怎么利用呢举例说明条件运算符(?:)是一个三目运算符,即有三个操作数。使用条件运算符(?:)可以实现Ifelse的功能,其一般形式为:表达式1?表达式2:表达式3例如条件语句:if(a>b)max=a;elsemax=b;可用条件表达式写为max=(a>b)?a:b;执…

    2022年10月3日
    0
  • 一步一步写算法(之 A*算法)

    一步一步写算法(之 A*算法)

    2021年12月4日
    38
  • 实现一个单向链表_java链表添加

    实现一个单向链表_java链表添加链表是常用的一种数据结构,如何创建链表、增、删、查找等功能是本文讨论的内容。首先,链表需要两个指针,一个是头指针是固定不变的,一个是移动变化的指针。(1)为什么要头指针?原因是单向列表中的数据结构包含的只有下一个数据的指针,这样就说明了,单向链表是不可逆向进行操作。所有的操作都需要正向去操作。这时我们必须要知道第一个数据的地址,才能从第一个数据往后访问其他数据。(2)可移动的指针的作用有两个,一个…

    2022年10月25日
    0

发表回复

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

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