登录    关于
马育民老师的博客

马育民的博客

QQ:65242847

JAVA反射案例:javabean转map

说明

在开发中,会有这种需求,将javabean转map,具体含义:

  • 将 javabean 对象中的属性(有 getter 方法)作为map中的key
  • 将 javabean 对象中的属性值 作为 map中的value

java代码

javabean

class Person{
    private String name;
    private int age;
    private float length;
    private boolean banzhang;

    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;
    }

    public float getLength() {
        return length;
    }

    public void setLength(float length) {
        this.length = length;
    }

    public boolean isBanzhang() {
        return banzhang;
    }

    public void setBanzhang(boolean banzhang) {
        this.banzhang = banzhang;
    }
}

Bean2Map类

public class Bean2Map {
    public static Map bean2map(Object obj) throws IllegalAccessException, InvocationTargetException {
        Map retMap=new HashMap();

        //获取所有的类的属性对象
        Field[] fields=obj.getClass().getDeclaredFields();
        //获取所有public方法对象
        Method[] methods=obj.getClass().getMethods();

        for(Field field:fields){
            //根据所有的类的属性对象,拼装 get方法 和 is方法
            String name=field.getName();
            String getMethodName="get"+name.substring(0,1).toUpperCase()+name.substring(1,name.length());
            String isMethodName="is"+name.substring(0,1).toUpperCase()+name.substring(1,name.length());

            //判断所有public方法中,是否有 属性的get方法 和 is方法,如果有就调用
            for(Method method:methods){
                String methodName=method.getName();
                if(methodName.equals(getMethodName) || methodName.equals(isMethodName)){
                    //调用方法
                    Object ret=method.invoke(obj);
                    retMap.put(name, ret);
                }
            }
        }
        return retMap;
    }
}

测试启动类

public class Main {
    public static void main(String[] args) {
        Person person=new Person();
        person.setName("李雷");
        person.setAge(20);
        person.setBanzhang(true);
        person.setLength(1.82f);

        Map map=null;
        try {
            map=Bean2Map.bean2map(person);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println();
    }
}

原文出处:https://malaoshi.top/show_1IX1HIGJRG5s.html