实体类工具(无其他引用包,复制即可使用)
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;
public class BeanUnit {
public static <T> T mapToBean(Map<String, Object> map, Supplier<T> supplier) {
if (supplier == null) {
return null;
}
return beanSetMapValue(supplier.get(), map);
}
public static <T> T mapToBean(Map<String, Object> map, Class<T> clazz) {
if (clazz == null) {
return null;
}
return beanSetMapValue(newInstance(clazz), map);
}
public static Map<String, Object> beanToMap(Object data) {
Map<String, Object> resultMap = new HashMap<>();
if (data == null) {
return resultMap;
}
Field[] fields = data.getClass().getDeclaredFields();
for (Field field : fields) {
Object value = get(field, data);
resultMap.put(field.getName(), value);
}
return resultMap;
}
public static <T> T beanSetMapValue(T bean, Map<String, Object> map) {
if (bean == null) {
return null;
}
if (map == null || map.size() == 0) {
return bean;
}
Field[] fields = bean.getClass().getDeclaredFields();
for (Field field : fields) {
String fieldName = field.getName();
Object value = map.get(fieldName);
if (value != null) {
set(field, bean, value);
}
}
return bean;
}
public static <T> T copy(Object source, T target) {
if (source == null || target == null) {
return target;
}
Map<String, Object> sourceMap = beanToMap(source);
return beanSetMapValue(target, sourceMap);
}
public static <T> T newInstance(Class<T> clazz) {
if (clazz == null) {
return null;
}
try {
return clazz.newInstance();
} catch (IllegalAccessException | InstantiationException e) {
return null;
}
}
public static void set(Field field, Object data, Object value) {
try {
field.setAccessible(true);
field.set(data, replaceType(value, field.getType()));
} catch (IllegalAccessException ignored) {
}
}
public static Object get(Field field, Object data) {
try {
field.setAccessible(true);
return field.get(data);
} catch (IllegalAccessException e) {
return null;
}
}
public static Object replaceType(Object data, Class<?> clazz) throws ClassCastException {
if (clazz == null) {
return data;
}
if (clazz == String.class) {
return data == null ? null : String.valueOf(data);
}
if (clazz == int.class) {
return data == null ? 0 : Integer.parseInt(data.toString());
}
if (clazz == Integer.class) {
return data == null ? null : Integer.valueOf(data.toString());
}
if (clazz == long.class) {
return data == null ? 0L : Long.parseLong(data.toString());
}
if (clazz == Long.class) {
return data == null ? null : Long.valueOf(data.toString());
}
if (clazz == double.class) {
return data == null ? 0.0d : Double.parseDouble(data.toString());
}
if (clazz == Double.class) {
return data == null ? null : Double.valueOf(data.toString());
}
if (clazz == float.class) {
return data == null ? 0f : Float.parseFloat(data.toString());
}
if (clazz == Float.class) {
return data == null ? null : Float.valueOf(data.toString());
}
if (clazz == byte.class) {
return data == null ? 0 : Byte.parseByte(data.toString());
}
if (clazz == Byte.class) {
return data == null ? null : Byte.valueOf(data.toString());
}
if (clazz == short.class) {
return data == null ? 0 : Short.parseShort(data.toString());
}
if (clazz == Short.class) {
return data == null ? null : Short.valueOf(data.toString());
}
if (clazz == boolean.class) {
return data != null && Boolean.parseBoolean(data.toString());
}
if (clazz == Boolean.class) {
return data == null ? null : Boolean.valueOf(data.toString());
}
if (clazz == char.class) {
return data == null ? '\u0000' : data.toString().charAt(0);
}
if (clazz == Character.class) {
return data == null ? null : data.toString().charAt(0);
}
return clazz.cast(data);
}
}