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)
上一篇 2022年6月11日 下午3:36
下一篇 2022年6月11日 下午3:36


相关推荐

  • C/C++图像处理算法(一)

    C/C++图像处理算法(一)图像处理算法1总结如下://添加椒盐噪声voidsalt(Mat&amp;src,intnumber){ for(inti=0;i&lt;number;i++) { intr=static_cast&lt;int&gt;(rng.uniform(0,src.rows)); intc=static_cast&lt;int&gt;(rng.un…

    2022年5月17日
    43
  • maven学习系列——(七)Dependency

    Dependency介绍本文转自:Maven简介(六)——Dependency,并加上自己在实际使用中的总结和说明!1、依赖的传递性依赖传递对版本的选择假设A依赖于B和C,然后B依赖于D,D又依赖于E1.0,C直接依赖于E2.0,那么这个时候A依赖的是E1.0还是E2.0,还是这两个都依赖呢?两个都依赖是肯定不行的,因为它们可能会有冲突的地方。这个时候就涉及到Maven中依赖传递对…

    2022年2月27日
    44
  • MPI_多节点执行程序[通俗易懂]

    MPI_多节点执行程序[通俗易懂] 有的时候MPI需要使用多节点,那么测试哪些进程在哪些机器上就比较重要,如下可以简单测试一下。#include&lt;unistd.h&gt;#include&lt;stdio.h&gt;#include&lt;mpi.h&gt;intmain(intargc,char*argv[]){charhostname[100];intrank,size;…

    2022年10月8日
    7
  • 动作识别调研

    动作识别调研图片来自电影’QuoVadis'(拉丁语,何去何从)(1951)。在发生什么?这些演员正要亲吻对方,还是已经这样做了?《你往何处去?QuoVadis?》,这部完成于一八九六年的著作,

    2022年8月2日
    10
  • 回到顶部

    回到顶部

    2021年6月5日
    107
  • android开机动画多长时间_Android 开机动画启动过程详解[通俗易懂]

    android开机动画多长时间_Android 开机动画启动过程详解[通俗易懂]Android开机会出现3个画面:1.Linux系统启动,出现Linux小企鹅画面(reboot)(Android1.5及以上版本已经取消加载图片);2.Android平台启动初始化,出现”ANDRIOD”文字字样画面;3.Android平台图形系统启动,出现含闪动的ANDROID字样的动画图片(start)。1、开机图片(Linux小企鹅)(Android1.5及以上…

    2022年5月15日
    37

发表回复

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

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