zoukankan      html  css  js  c++  java
  • 使用反射设置 java实体属性值

    /**
     * 功能描述:实体属性值设置
     * @author wy
     */
    public class ReflectionUtils {
        /**
         * 功能描述:设置实体属性
         * 参数 : obj 实体对象  | attrName 属性字段名   | attrValue 属性字段值
         */
        public static void setBeanAttr(Object obj, String attrName, Object attrValue) {
            // 将属性名的首字母变为大写,为执行set/get方法做准备
            String methodName = attrName.substring(0, 1).toUpperCase() + attrName.substring(1);
            Method setMethod = null;
            Method getMethod = null;
            try {
                getMethod = obj.getClass().getMethod("get" + methodName);
                setMethod = obj.getClass().getMethod("set" + methodName, getMethod.getReturnType());
                if (setMethod == null) {
                    setMethod = obj.getClass().getSuperclass().getMethod("set" + methodName, getMethod.getReturnType());
                }
                if (setMethod != null)
                    setMethod.invoke(obj, converseType(attrValue, getMethod.getReturnType()));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 功能描述:数据类型转换
         * 参数        param 属性字段值   | paramClass 属性字段类型
         */
        public static Object converseType(Object param, Class<?> paramClass) {
            if("java.util.List".equals(paramClass.getName())){
                return Arrays.asList(param);
            }
            //java.util.List  java.util.Set
            // 如果是自定义类型 通过返回值类型 实例化此类 给实例赋值 然后将实例set给引用的对象
            if(!isJavaClass(param.getClass())){
                System.out.println(param.getClass().getSimpleName()+"---------ceshi--------------");
                return param;
            }
            // 基本数据类型
            String paramString = (String) param;
            if (String.class.equals(paramClass))
                return paramString;
            if ((Boolean.TYPE.equals(paramClass)) || (Boolean.class.equals(paramClass)))
                return Boolean.valueOf(paramString);
            if ((Byte.TYPE.equals(paramClass)) || (Byte.class.equals(paramClass)))
                return Byte.valueOf(Byte.parseByte(paramString));
            if ((Short.TYPE.equals(paramClass)) || (Short.class.equals(paramClass)))
                return Short.valueOf(paramString);
            if ((Integer.TYPE.equals(paramClass)) || (Integer.class.equals(paramClass)))
                return Integer.valueOf(Integer.parseInt(paramString));
            if ((Long.TYPE.equals(paramClass)) || (Long.class.equals(paramClass)))
                return Long.valueOf(Long.parseLong(paramString));
            if ((Float.TYPE.equals(paramClass)) || (Float.class.equals(paramClass)))
                return Float.valueOf(Float.parseFloat(paramString));
            if ((Double.TYPE.equals(paramClass)) || (Double.class.equals(paramClass))
                    || (Number.class.equals(paramClass))) {
                return Double.valueOf(Double.parseDouble(paramString));
            }
            return paramString;
        }
    
        public static boolean isJavaClass(Class<?> clz) {
            return clz != null && clz.getClassLoader() == null;
        }
    }
  • 相关阅读:
    mysql常用时间列表的查询——七天内、本月、本周、某天
    js取数组获取最大值的四种方式
    Mysql按周,按月,按日,按小时分组统计数据
    Mysql中的sum函数为null时的解决办法
    Maven 中 dependencyManagement 标签使用
    嵌入式printf函数运用基于ti 16位MCU
    md5实现对用户名与密码的保护
    c# md5 算法实现
    define a struct
    file.open异常处理
  • 原文地址:https://www.cnblogs.com/wang-yi/p/9809122.html
Copyright © 2011-2022 走看看