Java ReflctUtil
//用来将map转为对象类型
package com.lcpsky.common.reflect;
import org.apache.commons.lang3.time.DateUtils;
import java.lang.reflect.Field;
import java.text.ParseException;
import java.util.Date;
import java.util.Map;
public class ReflectUtil {
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 把source转为target
*
* @param source source
* @param target target
* @param <T> 返回值类型
* @return 返回值
* @throws Exception newInstance可能会抛出的异常
*/
public static <T> T mapToObj(Map source, Class<T> target) throws Exception {
Field[] fields = target.getDeclaredFields();
T o = target.newInstance();
for (Field field : fields) {
Object val;
if ((val = source.get(field.getName())) != null) {
field.setAccessible(true);
field.set(o, getValue(val, field.getType()));
}
}
return o;
}
private static Object getValue(Object value, Class type) {
if (value != null) {
if (type.isAssignableFrom(String[].class))
return toStringArray(value);
if (type.isAssignableFrom(Integer[].class))
return toIntegerArray(value);
else if (type.isAssignableFrom(Integer.class) || type.isAssignableFrom(int.class))
return toInteger(value);
if (type.isAssignableFrom(Double.class) || type.isAssignableFrom(double.class))
return toDouble(value);
else if (type.isAssignableFrom(Boolean.class) || type.isAssignableFrom(boolean.class))
return toBoolean(value);
else if (type.isAssignableFrom(String.class))
return toString(value);
else if (type.isAssignableFrom(Date.class))
return toDate(value);
}
return null;
}
private static String[] toStringArray(Object value) {
return value.toString().split(",");
}
private static Integer[] toIntegerArray(Object value) {
String[] stringArray = toStringArray(value);
Integer[] intArray = new Integer[stringArray.length];
for (int i = 0; i < stringArray.length; i++) {
intArray[i] = Integer.parseInt(stringArray[i]);
}
return intArray;
}
private static Integer toInteger(Object value) {
return Integer.parseInt(value.toString());
}
private static Double toDouble(Object value) {
return Double.parseDouble(value.toString());
}
private static String toString(Object value) {
return value.toString();
}
private static Date toDate(Object value) {
try {
return DateUtils.parseDate(value.toString(), DATE_FORMAT);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
private static Boolean toBoolean(Object value) {
return Boolean.parseBoolean(value.toString());
}
}