无意间,看到项目中封装得找个工具类,感觉很好用,记录下,方便以后得项目可以随时使用:嘿嘿嘿。。。。。。。。。。。。
package com.xyebank.hzx.core.util;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ReflectionUtil {
private static Logger logger = LoggerFactory.getLogger(ReflectionUtil.class);
/**
* *通过反射的方式调用对象方法
* @param object 服务对象
* @param methodName 调用方法
* @param args 方法参数(具有顺序性)
*/
public static void invokeMethod(Object object, String methodName, Object[] args) throws Exception {
logger.debug(" invokeMethod start : 服务对象={},调用方法={} ",new Object[]{object,methodName});
Class<?>[] paramClasses = null;
if(!CommonUtils.isNullOrEmpty(args)) {
paramClasses = new Class<?>[args.length];
for(int i=0;i<args.length;i++) {
paramClasses[i] = args[i].getClass();
}
}
Method method = object.getClass().getMethod(methodName, paramClasses);
method.setAccessible(true);
method.invoke(object, args);
logger.debug(" invokeMethod end ");
}
/**
* *map转Object,同名属性赋值
* @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;
}
field.setAccessible(true);
Object value = map.get(field.getName());
if(value == null) {
continue;
}
String valueStr = String.valueOf(value);
String type = field.getGenericType().toString();
if(type.toLowerCase().contains("string")) {
field.set(obj, valueStr);
}
if(type.toLowerCase().contains("int") && NumberValidationUtils.isWholeInteger(valueStr)) {
field.set(obj, Integer.valueOf(valueStr));
}
if(type.toLowerCase().contains("long") && NumberValidationUtils.isWholeInteger(valueStr)) {
field.set(obj, Long.valueOf(valueStr));
}
if(type.toLowerCase().contains("double") && NumberValidationUtils.isRealNumber(valueStr)) {
field.set(obj, Double.valueOf(valueStr));
}
if(type.toLowerCase().contains("boolean")) {
field.set(obj, Boolean.valueOf(valueStr));
}
if(type.toLowerCase().contains("float") && NumberValidationUtils.isRealNumber(valueStr)) {
field.set(obj, Float.valueOf(valueStr));
}
if(type.toLowerCase().contains("byte") && NumberValidationUtils.isWholeInteger(valueStr)) {
field.set(obj, Byte.valueOf(valueStr));
}
if(type.toLowerCase().contains("short") && NumberValidationUtils.isWholeInteger(valueStr)) {
field.set(obj, Short.valueOf(valueStr));
}
if(type.toLowerCase().contains("char") && NumberValidationUtils.isWholeInteger(valueStr)) {
String str = String.valueOf(valueStr);
if(str.length()==1) {
field.set(obj, Character.valueOf(String.valueOf(value).charAt(0)));
}
}
//TODO 如果有其他类型,自行添加
}
return obj;
}
/**
* *object转map,同名属性赋值
* @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[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
int mod = field.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
return map;
}
/**
* *将新对象的值赋给旧对象
* @param old 旧对象
* @param ne 新对象
* @param fieldsOut 过滤属性
* @throws Exception
*/
public static void copyFieldWithOut(Object old, Object ne, String[] fieldsOut) throws Exception {
Class<?> clazz = old.getClass();
if (!clazz.getName().equals(ne.getClass().getName())) {
return;
}
List<String> outList = new ArrayList<String>();
if (fieldsOut != null) {
outList = Arrays.asList(fieldsOut);
}
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
int mod = f.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}
if (!outList.contains(f.getName())) {
f.setAccessible(true);
f.set(old, f.get(ne));
}
}
}
/**
* *将新对象的值赋给旧对象
* @param old 旧对象
* @param ne 新对象
* @param fieldsIn 包含属性
* @throws Exception
*/
public static void copyFieldWithIn(Object old, Object ne, String[] fieldsIn) throws Exception {
Class<?> clazz = old.getClass();
if (!clazz.getName().equals(ne.getClass().getName())) {
return;
}
List<String> inList = new ArrayList<String>();
if (fieldsIn != null) {
inList = Arrays.asList(fieldsIn);
}
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
int mod = f.getModifiers();
if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
continue;
}
if (inList.contains(f.getName())) {
f.setAccessible(true);
f.set(old, f.get(ne));
}
}
}
}