2025年对象转map工具类BeanUtil

对象转map工具类BeanUtil2 当 isAccessible 的结果是 false 时不允许通过反射访问 private 变量 package com yung ppapi util import java beans BeanInfo import java beans Introspector import java beans PropertyDesc import java lang

2、当isAccessible()的结果是false时不允许通过反射访问private变量。

package com.yung.ppapi.util;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.BeanMap;
import org.springframework.beans.BeanUtils;

import com.yung.ppapi.integration.dto.YCPFExpressDTO;

/**
*
* @author lisheng4
*
*/
public class BeanUtil {

public static T clone(Object source, Class type) {
try {
if (source == null) {
return null;
}
T target = type.newInstance();
BeanUtils.copyProperties(source, target);
return target;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static T clone(Object source, Class type, String... ignoreProperties) {
try {
if (source == null) {
return null;
}
T target = type.newInstance();
BeanUtils.copyProperties(source, target, ignoreProperties);
return target;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

/**
* 利用反射实现
* @param map
* @param beanClass
* @return
* @throws Exception
*/
public static Object mapToObject(Map map, Class beanClass) throws Exception {
if (map == null) {
return null;
}

Object obj = beanClass.newInstance();

Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
int mod = field.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}

boolean accessFlag = field.isAccessible();
field.setAccessible(true);// 允许通过反射访问该字段
field.set(obj, map.get(field.getName()));
field.setAccessible(accessFlag);
}

return obj;
}

/**
* 利用反射实现
*
  • 空属性不转换
    *
  • 超过10万条数据不建议使用
    * @param obj
    * @return
    * @throws Exception
    */
    public static Map objectToMap(Object obj) throws Exception {

    if (obj == null) {
    return null;
    }

    Map map = new HashMap();
    Field[] fields = obj.getClass().getDeclaredFields();
    for (int i = 0, len = fields.length; i < len; i++) {
    String varName = fields[i].getName();
    boolean accessFlag = fields[i].isAccessible();
    fields[i].setAccessible(true);// 允许通过反射访问该字段

    Object valueObj = fields[i].get(obj);
    if (valueObj != null) {
    map.put(varName, valueObj);
    }
    fields[i].setAccessible(accessFlag);
    }
    return map;
    }

    /**
    * 利用java.beans.Introspector实现
    * @param map
    * @param beanClass
    * @return
    * @throws Exception
    */
    public static Object mapToObject2(Map map, Class beanClass) throws Exception {
    if (map == null)
    return null;

    Object obj = beanClass.newInstance();

    BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
    for (PropertyDescriptor property : propertyDescriptors) {
    Method setter = property.getWriteMethod();
    if (setter != null) {
    setter.invoke(obj, map.get(property.getName()));
    }
    }
    return obj;
    }

    /**
    * 利用java.beans.Introspector实现
    * @param obj
    * @return
    * @throws Exception
    */
    public static Map objectToMap2(Object obj) throws Exception {
    if(obj == null)
    return null;

    Map map = new HashMap();

    BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
    for (PropertyDescriptor property : propertyDescriptors) {
    String key = property.getName();
    if (key.compareToIgnoreCase("class") == 0) {
    continue;
    }
    Method getter = property.getReadMethod();
    Object value = getter!=null ? getter.invoke(obj) : null;
    map.put(key, value);
    }

    return map;
    }

    /**
    * 利用org.apache.commons.beanutils.BeanUtils实现
    * @param map
    * @param beanClass
    * @return
    * @throws Exception
    */
    public static Object mapToObject3(Map map, Class beanClass) throws Exception {
    if (map == null)
    return null;

    Object obj = beanClass.newInstance();
    org.apache.commons.beanutils.BeanUtils.populate(obj, map);
    return obj;
    }

    /**
    * 利用org.apache.commons.beanutils.BeanMap实现
    * @param obj
    * @return
    */
    public static Map objectToMap3(Object obj) {
    if(obj == null)
    return null;

    return new BeanMap(obj);
    }


    // public static void main(String[] args) throws Exception {
    // List> mapList = new ArrayList>();
    // List> mapList2 = new ArrayList>();
    // List> mapList3 = new ArrayList>();
    // long t11 = System.currentTimeMillis();
    // for(int i=1;i<=100000;i++) {
    // mapList.add(objectToMap(new YCPFExpressDTO()));
    // }
    // long t12 = System.currentTimeMillis();
    //
    // long t21 = System.currentTimeMillis();
    // for(int i=1;i<10000;i++) {
    // mapList2.add((Map) objectToMap2(new YCPFExpressDTO()));
    // }
    // long t22 = System.currentTimeMillis();
    //
    // long t31 = System.currentTimeMillis();
    // for(int i=1;i<10000;i++) {
    // mapList3.add((Map) objectToMap3(new YCPFExpressDTO()));
    // }
    // long t32 = System.currentTimeMillis();
    // System.out.println(t12-t11);
    // System.out.println(t22-t21);
    // System.out.println(t32-t31);
    // //System.out.println(t32-t31);
    // }

    }
  • 参考文章:https://www.cnblogs.com/XuYiHe/p/6871799.html

    参考文章:https://blog.csdn.net/o_nianchenzi_o/article/details/78022416

    编程小号
    上一篇 2025-01-19 11:57
    下一篇 2025-01-19 11:46

    相关推荐

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
    如需转载请保留出处:https://bianchenghao.cn/hz/148267.html