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


相关推荐

  • 1040. 有几个PAT(25)- PAT乙级真题

    1040. 有几个PAT(25)- PAT乙级真题1040.有几个PAT(25)字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T);第二个PAT是第3位(P),第4位(A),第6位(T)。现给定字符串,问一共可以形成多少个PAT?输入格式:输入只有一行,包含一个字符串,长度不超过105,只包含P、A、T三种字母。输出格式:在一行中输出给定字符串中包含多少个PAT。由于结果可能比较大,只输出对…

    2022年5月1日
    43
  • 【ceph】vdbench的使用教程——裸盘测试和文件系统测试

    【ceph】vdbench的使用教程——裸盘测试和文件系统测试目录即看即用详细说明vdbench简介常用执行选项和参数文件说明1、文件系统2、块设备(裸盘测试)运行使用1、单机运行2、联机运行结果分析1、输出文件2、结果分析测试说明1、测试总结2、常见测试参数即看即用测试一下vdbench的可用性:进入vdbench相应目录下./vdbench-t运行测试模型./vdbench-f{filename}-o{exportpath}#注:-f后接测试参数文件名,-o后接导出测试.

    2022年5月12日
    81
  • EJB学习日志

    EJB学习日志第一天:经典的:HelloWord 1. 编写helloword接口packagecom.ejb;publicinterfaceHelloWord{ publicStringsayHello(Stringname);}2.HelloWord的实现packagecom.ejb.impl;importjavax.ejb.Remote;impor

    2022年9月29日
    1
  • sm2和sm4加密算法浅析

    sm2和sm4加密算法浅析sm2和sm4加密算法浅析一:SM2简介:SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC256位(SM2采用的就是ECC256位的一种)安全强度比RSA2048位高,但运算速度快于RSA。SM2和RSA算法比较SM2性能更优更安全:密码复杂度高、处理速度快、机器性能消耗更小①:加密算法以及流程:输入:需要发送的消息为比特串M,klen为M的比特

    2022年10月6日
    0
  • 288÷4×7解决什么问题_java has not been found

    288÷4×7解决什么问题_java has not been found前言:今天连接zookeepter的时候出现问题(上午连接的时候还没问题的,下午就出现了问题,很是无奈)报错信息如下:java.net.ConnectException:Connectiontimedout:nofurtherinformation atsun.nio.ch.SocketChannelImpl.checkConnect(NativeMethod) ats…

    2022年9月18日
    0
  • 合并两个排序的单链表

    合并两个排序的单链表

    2022年1月29日
    40

发表回复

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

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