前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java对象转换map

java对象转换map

作者头像
全栈程序员站长
发布于 2022-06-30 12:21:32
发布于 2022-06-30 12:21:32
91800
代码可运行
举报
运行总次数:0
代码可运行

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

背景介绍

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

原理说明

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

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

功能作用
  • 在运行时可以动态获取一个对象属于哪个类
  • 在运行时可以动态创建一个类的对象
  • 在运行时可以获取类的属性和方法
  • 在运行时可以调用对象的任何方法
  • 可以实现动态代理
实现方式
  • 通过Object类的getClass方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    Class cla = obj.getClass
  • 通过对象实例方法获取对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    Class cla = String.class
  • 通过Class.forName()方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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

  • 创建测试对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.cn/131985.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验