class<-->class class<-->map-->-->
该工具类主要实现了实体类与实体类之间的转化以及实体类与map之间的转化
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; /** * * @author 张剑 * @version 1.2 * */ public class ZJ_BeanUtils { /** * java反射bean的get方法 * * @param objectClass * @param fieldName * @return * @throws SecurityException * @throws NoSuchMethodException */ @SuppressWarnings({ "unchecked", "rawtypes" }) private static Method getGetMethod(Class objectClass, String fieldName) throws NoSuchMethodException, SecurityException { Method method = null; try { StringBuffer sb = new StringBuffer(); sb.append("get"); sb.append(fieldName.substring(0, 1).toUpperCase()); sb.append(fieldName.substring(1)); method = objectClass.getMethod(sb.toString()); } catch (Exception e) { StringBuffer sb = new StringBuffer(); sb.append("is"); sb.append(fieldName.substring(0, 1).toUpperCase()); sb.append(fieldName.substring(1)); method = objectClass.getMethod(sb.toString()); } return method; } /** * java反射bean的set方法 * * @param objectClass * @param fieldName * @return * @throws SecurityException * @throws NoSuchFieldException * @throws NoSuchMethodException */ @SuppressWarnings({ "rawtypes", "unchecked" }) private static Method getSetMethod(Class objectClass, String fieldName) throws NoSuchFieldException, SecurityException, NoSuchMethodException { Method method = null; Class[] parameterTypes = new Class[1]; Field field = objectClass.getDeclaredField(fieldName); parameterTypes[0] = field.getType(); StringBuffer sb = new StringBuffer(); sb.append("set"); sb.append(fieldName.substring(0, 1).toUpperCase()); sb.append(fieldName.substring(1)); method = objectClass.getMethod(sb.toString(), parameterTypes); return method; } /** * 执行set方法 * * @param o * 执行对象 * @param fieldName * 属性 * @param value * 值 * @throws InvocationTargetException * @throws IllegalArgumentException * @throws IllegalAccessException * @throws NoSuchMethodException * @throws SecurityException * @throws NoSuchFieldException */ private static void invokeSet(Object o, String fieldName, Object value) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException, SecurityException, NoSuchMethodException { Method method = getSetMethod(o.getClass(), fieldName); method.invoke(o, new Object[] { value }); } /** * 执行get方法 * * @param o * 执行对象 * @param fieldName * 属性 * @throws InvocationTargetException * @throws IllegalArgumentException * @throws IllegalAccessException * @throws SecurityException * @throws NoSuchMethodException */ private static Object invokeGet(Object o, String fieldName) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { Method method = getGetMethod(o.getClass(), fieldName); return method.invoke(o, new Object[0]); } /** * 是否有字段 * * @param o * @param fieldName * @return */ private static boolean isHasField(Object o, String fieldName) { Object[] objects = getFieldNamesByMethod(o); for (Object object : objects) { if (object.toString().equals(fieldName)) { return true; } } return false; } /** * 数组中是否包含字符串 * * @param ignoreProperties * @param str * @return */ private static boolean isHasStr(String[] ignoreProperties, String str) { for (String string : ignoreProperties) { if (string.equals(str)) { return true; } } return false; } /** * 获取对象所有字段(通过方法) * * @param obj * @return */ public static Object[] getFieldNamesByMethod(Object obj) { Setset = new TreeSet (); Method[] methods = obj.getClass().getMethods(); for (Method method : methods) { String name = method.getName(); if (name.startsWith("get")) { name = name.substring(3); name = name.substring(0, 1).toLowerCase() + name.substring(1); set.add(name); } else if (name.startsWith("is")) { name = name.substring(2); name = name.substring(0, 1).toLowerCase() + name.substring(1); set.add(name); } } if (set.contains("class")) { set.remove("class"); } Object[] fieldStrs = set.toArray(); return fieldStrs; } /** * 获取对象所有字段(通过属性) * * @param obj * @return */ public static Object[] getFieldNamesByField(Object obj) { Set set = new TreeSet (); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { String name = field.getName(); if (null != name && !"".equals(name)) { set.add(name); } } if (set.contains("class")) { set.remove("class"); } Object[] fieldStrs = set.toArray(); return fieldStrs; } /** * 获取对象所有字段(通过属性和方法) * * @param obj * @return */ public static Object[] getFieldNamesByAll(Object obj) { Set set = new TreeSet (); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { String name = field.getName(); if (null != name && !"".equals(name)) { set.add(name); } } Method[] methods = obj.getClass().getMethods(); for (Method method : methods) { String name = method.getName(); if (name.startsWith("get")) { name = name.substring(3); name = name.substring(0, 1).toLowerCase() + name.substring(1); set.add(name); } else if (name.startsWith("is")) { name = name.substring(2); name = name.substring(0, 1).toLowerCase() + name.substring(1); set.add(name); } } if (set.contains("class")) { set.remove("class"); } Object[] fieldStrs = set.toArray(); return fieldStrs; } /** * 获取对象所有字段名称与类型(通过方法) * * @param obj * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static Map getFieldMsgByMethod(Object obj) { Map map = new TreeMap (); Method[] methods = obj.getClass().getMethods(); for (Method method : methods) { String name = method.getName(); if (name.startsWith("get")) { name = name.substring(3); name = name.substring(0, 1).toLowerCase() + name.substring(1); map.put(name, method.getReturnType().getName()); } else if (name.startsWith("is")) { name = name.substring(2); name = name.substring(0, 1).toLowerCase() + name.substring(1); map.put(name, method.getReturnType().getName()); } } if (map.keySet().contains("class")) { map.remove("class"); } return map; } /** * 获取对象所有字段名称与类型(通过属性) * * @param obj * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static Map getFieldMsgByField(Object obj) { Map map = new TreeMap (); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { String name = field.getName(); if (null != name && !"".equals(name)) { map.put(name, field.getType().getName()); } } if (map.keySet().contains("class")) { map.remove("class"); } return map; } /** * 获取对象所有字段名称与类型(通过属性和方法) * * @param obj * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static Map getFieldMsgByAll(Object obj) { Map map = new TreeMap (); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { String name = field.getName(); if (null != name && !"".equals(name)) { map.put(name, field.getType().getName()); } } Method[] methods = obj.getClass().getMethods(); for (Method method : methods) { String name = method.getName(); if (name.startsWith("get")) { name = name.substring(3); name = name.substring(0, 1).toLowerCase() + name.substring(1); map.put(name, method.getReturnType().getName()); } else if (name.startsWith("is")) { name = name.substring(2); name = name.substring(0, 1).toLowerCase() + name.substring(1); map.put(name, method.getReturnType().getName()); } } if (map.keySet().contains("class")) { map.remove("class"); } return map; } /** * copy(class-->class) * * @param source源 * @param target目标 * @param isCopyNull是否拷贝null * @param ignoreProperties忽略的字段 * @return */ public static void copyProperties(Object source, Object target, boolean isCopyNull, String[] ignoreProperties) { Object[] fields = getFieldNamesByMethod(source); for (Object field : fields) { String name = field.toString(); Object value = null; try { value = invokeGet(source, name); if (null != ignoreProperties && isHasStr(ignoreProperties, name)) { continue; } if (isHasField(target, name)) { if (null != value) { invokeSet(target, name, value); } else if (isCopyNull) { invokeSet(target, name, value); } } } catch (Exception e) { continue; } } } /** * copy(class-->class) * * @param source源 * @param target目标 * @param isCopyNull是否拷贝null * @return */ public static void copyProperties(Object source, Object target, boolean isCopyNull) { copyProperties(source, target, isCopyNull, null); } /** * copy(map-->class) * * @param map源 * @param target目标 * @param isCopyNull是否拷贝null * @param ignoreProperties忽略的字段 * @return */ @SuppressWarnings("rawtypes") public static void copyProperties(Map map, Object target, boolean isCopyNull, String[] ignoreProperties) { Set set = map.keySet(); for (Object object : set) { try { String name = object.toString(); Object value = map.get(name); if (null != ignoreProperties && isHasStr(ignoreProperties, name)) { continue; } if (isHasField(target, name)) { if (null != value) { invokeSet(target, name, value); } else if (isCopyNull) { invokeSet(target, name, value); } } } catch (Exception e) { continue; } } } /** * copy(map-->class) * * @param map源 * @param target目标 * @param isCopyNull是否拷贝null * @return */ @SuppressWarnings("rawtypes") public static void copyProperties(Map map, Object target, boolean isCopyNull) { copyProperties(map, target, isCopyNull, null); } /** * copy(class-->map) * * @param source源 * @param map目标 * @param isCopyNull是否拷贝null * @param ignoreProperties忽略的字段 * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static void copyProperties(Object source, Map map, boolean isCopyNull, String[] ignoreProperties) { Object[] fieldNames = getFieldNamesByMethod(source); for (Object field : fieldNames) { String name = field.toString(); Object value = null; try { value = invokeGet(source, name); if (null != ignoreProperties && isHasStr(ignoreProperties, name)) { continue; } if (null != value) { map.put(name, value); } else if (isCopyNull) { map.put(name, value); } } catch (Exception e) { System.out.println(e); continue; } } } /** * copy(class-->map) * * @param source源 * @param map目标 * @param isCopyNull是否拷贝null * @return */ @SuppressWarnings("rawtypes") public static void copyProperties(Object source, Map map, boolean isCopyNull) { copyProperties(source, map, isCopyNull, null); } }