Java实体对象初始化(反射)

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();
    }

总结

直接使用

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值