java根据反射给实体类为空的属性值设置默认值

/**
* 属性值为null和空的时候设置默认值
*
* @param demo 实体类
*/
private static void defaultValue(Object demo) {
	try {
		Class<?> aClass = demo.getClass();
		Field[] declaredFields = aClass.getDeclaredFields();
		List<String> fieldName = new ArrayList<>();
		for (Field field : declaredFields) {
			field.setAccessible(true);
			String name = field.getName();
			if (!"".equals(name)) {
				fieldName.add(name);
			}
		}
		for (String s : fieldName) {
			Method method = aClass.getMethod("get" + s.substring(0, 1).toUpperCase() + s.substring(1));
			Object invoke = method.invoke(demo);
			if (invoke == null || "".equals(invoke)) {
				Field field = aClass.getDeclaredField(s);
				field.setAccessible(true);
				String typeName = field.getGenericType().getTypeName();
				if (typeName.contains("String")) {
					field.set(demo, "1");
				} else if (typeName.contains("Integer")) {
					field.set(demo, 0);
				} else if (typeName.contains("Double")) {
					field.set(demo, 0.0);
				} else if (typeName.contains("BigDecimal")) {
					field.set(demo, BigDecimal.valueOf(0));
				} else if (typeName.contains("Date")) {
					field.set(demo, new Date());
				} else if (typeName.contains("Boolean")) {
					field.set(demo, true);
				}
			}
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
}

测试

/** 创建User实体类 */
@Data
public class User {
	private Integer id;
	private String name;
	private String sex;
	private Date loginDate;
	private boolean isState;
}
public static void main(String[] args) {
	User user = new User();
	user.setId(1);
	user.setIsState(false);
	System.out.println("设置默认值之前 = "+user);
	//设置默认值之前 = User(id=1, name=null, sex=null, loginDate=null, isState=false)
	defaultValue(user);
	System.out.println("设置默认值后 = "+user);
	//设置默认值后 = User(id=1, name=1, sex=1, loginDate=Tue May 03 17:10:06 CST 2022, isState=false)
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值