判断类中属性是否为空并设置相应默认值

2020-01-13  本文已影响0人  半日孤独
通过反射进行判断
 /**
     * null转为空字符串
     * @param bean
     * @param <T>
     */
    public static <T> void nullToEmpty(T bean) {
        Field[] field = bean.getClass().getDeclaredFields();
        //遍历所有属性
        for (int j = 0; j < field.length; j++) {
            //获取属性的名字
            String name = field[j].getName();
            //将属性的首字符大写,方便构造get,set方法
            name = name.substring(0, 1).toUpperCase() + name.substring(1);
            //获取属性的类型
            String type = field[j].getGenericType().toString();
            ValidatorType(bean, name, type);
        }
    }
 /**
     * 验证数据类型
     * @param bean
     * @param name
     * @param type
     * @param <T>
     */
    private static <T> void ValidatorType(T bean, String name, String type) {
        String[] types = {"class java.lang.String", "class java.lang.Integer", "class java.lang.Double"};
        int index = 2;
        try {
            Method mGet = bean.getClass().getMethod("get" + name);
            //如果type是类类型,则前面包含"class ",后面跟类名
            if (types[0].equals(type)) {
                String value = (String) mGet.invoke(bean);
                setParamValue(bean, name, value, "",String.class);
            } else if (types[1].equals(type)) {
                //调用getter方法获取属性值
                Integer value = (Integer) mGet.invoke(bean);
                setParamValue(bean, name, value, 0,Integer.class);
            } else if (types[index].equals(type)) {
                //调用getter方法获取属性值
                Double value = (Double) mGet.invoke(bean);
                setParamValue(bean, name, value, 0D,Double.class);
            }
        } catch (Exception e) {
            LOGGER.error("设置属性值出错:" + e.getMessage());
        }
    }
  /**
     * 设置属性值
     * @param bean
     * @param name
     * @param value
     * @param tmp
     * @param <T>
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     */
    private static <T> void setParamValue(T bean, String name, Object value, Object tmp,Class clazz) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        if (value == null) {
            Method mSet = bean.getClass().getMethod("set" + name, clazz);
            mSet.invoke(bean, tmp);
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读