Java对象中非空属性一键转Map,让你的代码飞起来

createh53个月前 (01-07)技术教程41

哈喽,大家好,我是木头左!

引言

在日常开发中,经常会遇到需要将一个Java对象中的非空属性提取出来,放到一个Map中的情况。这样的做法有很多好处,比如方便进行属性的查找、修改等操作,同时也能够提升代码的可读性和可维护性。那么如何实现这个功能呢?本文将为你揭晓答案!

一、准备工作

在开始之前,需要准备一些工具和库。需要引入一个名为bean-utils的第三方库,它可以帮助轻松地获取Java对象的属性值。你可以通过以下命令将其添加到你的项目中:

<!-- Maven -->
<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.4</version>
</dependency>

<!-- Gradle -->
implementation 'commons-beanutils:commons-beanutils:1.9.4'

另外,还需要使用Java的反射机制来获取对象的属性值。你可以通过以下方式创建一个工具类,用于封装这些操作:

import org.apache.commons.beanutils.BeanUtils;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class ObjectToMapUtil {
    public static Map<String, Object> objectToMap(Object obj) throws IllegalAccessException {
        Map<String, Object> map = new HashMap<>();
        for (Field field : obj.getClass().getDeclaredFields()) {
            field.setAccessible(true);
            map.put(field.getName(), field.get(obj));
        }
        return map;
    }
}

二、实战演示

接下来,将通过一个实际的例子来演示如何使用ObjectToMapUtil将一个Java对象中的非空属性提取出来,放到一个Map中。假设有一个如下的Java对象:

public class User {
    private String name;
    private Integer age;
    private String email;
    // 省略构造方法、getter和setter方法
}

希望将这个对象的name、age和email属性提取出来,放到一个Map中。可以这样做:

public static void main(String[] args) {
    User user = new User("张三", 25, "zhangsan@example.com");
    try {
        Map<String, Object> map = ObjectToMapUtil.objectToMap(user);
        System.out.println(map); // 输出:{name=张三, age=25, email=zhangsan@example.com}
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

可以看到,成功地将User对象中的name、age和email属性提取出来,放到了一个Map中。这样就可以方便地进行属性的查找、修改等操作了。同时,由于使用了反射机制,所以这个方法同样适用于其他类型的对象。

我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!

相关文章

教你如何在Java中更好的定义常量

关于Java中常量的话题似乎有很多困惑。有些人使用整数或字符串来定义常量,而另一些人则使用枚举。我还遇到了在它们自己的接口中定义的常量——在接口中,使用常量的类必须实现接口。这种策略通常被称为接口常量...

Java基础知识 - 静态代理/JDK动态代理/Cglib动态代理

1)代理的作用是为指定类构建代理类;1、指定类可能不能够直接被访问,所以在外层包一层代理类,让执行代理类方法;2、也有可能想在执行指定类的方法前后,做一些自己的事情,也可以使用代理类;2)使用哪种代理...

Java静态内部类、匿名内部类、成员式内部类和局部内部类

内部类可以是静态(static)的,可以使用 public、protected 和 private 访问控制符,而外部类只能使用 public,或者默认。成员式内部类在外部类内部直接定义(不在方法内部...

起飞,会了这4个 Intellij IDEA 调试魔法,阅读源码都简单了

前言上一篇文章 IntelliJ IDEA 高级调试之Stream Trace 算是 IntelliJ IDEA 高级调试技巧的开胃菜,小伙伴们被这个小技巧征服,趁热打铁,今天给大家带来几个大家日常工...

java中线程同步的几种方法

方法一:使用synchronized关键字由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。注: synchro...

「Java基础06」java方法使用

目录1. 方法的定义调用1.1 无参方法1.2 有参方法1.3 有返回值方法1.4 方法的调用1.5 形参和实参2. 方法重载3. 方法的参数传递4. 程序中的关键字方法是将独立的代码块组织成一个成体...