物件轉map工具類BeanUtil
阿新 • • 發佈:2018-12-20
1、
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> T clone(Object source, Class<T> 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> T clone(Object source, Class<T> 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<String, Object> 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; } /** * 利用反射實現 * <li>空屬性不轉換 * <li>超過10萬條資料不建議使用 * @param obj * @return * @throws Exception */ public static Map<String, Object> objectToMap(Object obj) throws Exception { if (obj == null) { return null; } Map<String, Object> map = new HashMap<String, Object>(); 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<String, Object> 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<String, Object> objectToMap2(Object obj) throws Exception { if(obj == null) return null; Map<String, Object> map = new HashMap<String, Object>(); 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<String, Object> 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<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>(); // List<Map<String,Object>> mapList2 = new ArrayList<Map<String,Object>>(); // List<Map<String,Object>> mapList3 = new ArrayList<Map<String,Object>>(); // 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<String, Object>) objectToMap2(new YCPFExpressDTO())); // } // long t22 = System.currentTimeMillis(); // // long t31 = System.currentTimeMillis(); // for(int i=1;i<10000;i++) { // mapList3.add((Map<String, Object>) 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); // } }
樓主這麼辛苦,請使用樓主的推薦碼領取支付寶紅包吧,記得一定要消費掉哦。雙贏^_^。
1、開啟支付寶首頁搜尋“8282987” 立即領紅包。