class<-->class class<-->map
代码语言:javascript复制该工具类主要实现了实体类与实体类之间的转化以及实体类与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) {
Set set = 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);
}
}