Java实体对象初始化
前言
为指定实体类的所有字段以及多层子实体类的字段、各种集合类型的字段赋默认值。
一、Java实体bean
参数传入
二、使用步骤
1.引入库
代码如下(示例):
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
2.工具类展示
代码如下(示例):
/**
* 为指定实体类的所有字段以及多层子实体类的字段、各种集合类型的字段赋默认值
*
* @param entityClass 实体类的Class对象
* @param <T> 实体类的类型
* @throws IllegalAccessException 当访问实体类字段失败时抛出
* @throws InstantiationException 当创建实体类实例失败时抛出
*/
public static <T> T setDefaultValues(Class<T> entityClass) {
try {
T entity = entityClass.newInstance();
Field[] fields = entityClass.getDeclaredFields();
for (Field field : fields) {
if (field.getName().equals("serialVersionUID")) {
continue;
}
field.setAccessible(true);
Object value = null;
Class<?> fieldType = field.getType();
if (Collection.class.isAssignableFrom(fieldType)) {
if (List.class.isAssignableFrom(fieldType)) {
value = new ArrayList<>();
} else if (Map.class.isAssignableFrom(fieldType)) {
value = new HashMap<>();
} else {
value = new ArrayList<>();
}
field.set(entity, value);
} else if (fieldType.getClassLoader() != null) {
Object subEntity = setDefaultValues(fieldType);
field.set(entity, subEntity);
} else if (Date.class.isAssignableFrom(fieldType)) {
value = toTime();
field.set(entity, value);
} else {
value = getDefaultFieldValue(fieldType);
field.set(entity, value);
}
}
return entity;
} catch (Exception e) {
log.error("字段解析错误: 错误信息:{}", e.getMessage());
}
return (T) entityClass;
}
/**
* 获取指定数据类型的默认值
*
* @param type 数据类型的Class对象
* @return 数据类型的默认值
*/
private static Object getDefaultFieldValue(Class<?> type) {
if (type == int.class || type == Integer.class) {
return 0;
} else if (type == long.class || type == Long.class) {
return 0L;
} else if (type == float.class || type == Float.class) {
return 0.0F;
} else if (type == double.class || type == Double.class) {
return 0.0D;
} else if (type == byte.class || type == Byte.class) {
return (byte) 0;
} else if (type == short.class || type == Short.class) {
return (short) 0;
} else if (type == boolean.class || type == Boolean.class) {
return false;
} else if (type == char.class || type == Character.class) {
return '\u0000';
} else if (type == String.class) {
return "";
} else if (type == Date.class) {
return toTime();
} else {
return null; // 引用类型默认为null
}
}
// 日期数据初始化
static Date toTime() {
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//0000-00-00 00:00:00
return dateFormat.parse("0000-00-00 00:00:00");
} catch (Exception e) {
log.error("日期初始化错误");
}
return new Date();
}
总结
直接使用