java反射生成对象并放入默认值

https://blog.csdn.net/xionglangs/article/details/108507899

  private Object getTestRuleDTO(String dtoPath){
        Class catClass ;
        Object obj = null;
        try {
            catClass = Class.forName(ruleDtoPath);
            obj = catClass.newInstance();
        } catch (Exception e) {
            log.error("ruleDtoPath:{},实例化出现异常:{},e:",ruleDtoPath,e.getMessage(),e);
        }
        return initPropertyDefaultValue(obj);
    }

    private static Object initPropertyDefaultValue(Object obj) {
        Field[] fields = obj.getClass().getDeclaredFields();
        Method[] methods = obj.getClass().getDeclaredMethods();
        Map<String, Method> methodNameMethodMap = new HashMap(methods.length);
        for (Method method : methods) {
            methodNameMethodMap.put(method.getName().toLowerCase(), method);
        }
        for (Field field : fields) {
            Class<?> clazz = field.getType();
            String propertyName = field.getName();
            Method method = methodNameMethodMap.get("set" + propertyName.toLowerCase());
            if (method == null) {
                continue;
            }
            try {
                if (isWrapClass(clazz) || isCommonDataType(clazz)) {
                    if (clazz == Boolean.class || clazz.getName().contains("boolean")) {
                        method.invoke(obj, Boolean.TRUE);
                    } else if (clazz == Byte.class || clazz.getName().contains("byte")) {
                        method.invoke(obj, new Byte("1"));
                    } else if (clazz == Short.class || clazz.getName().contains("short")) {
                        method.invoke(obj, new Short("1"));
                    } else if (clazz == Integer.class || clazz.getName().contains("int")) {
                        method.invoke(obj, 1);
                    } else if (clazz == Long.class || clazz.getName().contains("long")) {
                        method.invoke(obj, 1L);
                    } else if (clazz == Float.class || clazz.getName().contains("float")) {
                        method.invoke(obj, 1F);
                    } else if (clazz == Double.class || clazz.getName().contains("double")) {
                        method.invoke(obj, 1D);
                    } else if (clazz == Character.class || clazz.getName().contains("char")) {
                        method.invoke(obj, '1');
                    }
                } else if (BigDecimal.class.isAssignableFrom(clazz)) {
                    method.invoke(obj, new BigDecimal("1"));
                } else if (Date.class.isAssignableFrom(clazz)) {
                    method.invoke(obj, new Date());
                } else if (String.class.isAssignableFrom(clazz)) {
                    method.invoke(obj, "测试");
                } else if (Collection.class.isAssignableFrom(clazz)) {
                    Type[] type = method.getGenericParameterTypes();
                    ParameterizedType pType = (ParameterizedType) type[0];
                    Collection collection = null;
                    if (pType.getRawType().toString().endsWith("List")) {
                        collection = Lists.newArrayList();
                    } else if (pType.getRawType().toString().endsWith("Set")) {
                        collection = Sets.newHashSet();
                    }
                    Object objValue = null;
                    try {
                        objValue = Class.forName(pType.getActualTypeArguments()[0].getTypeName()).newInstance();
                    } catch (Exception e) {
                    }
                    if (objValue == null) {
                        continue;
                    }
                    Object childObj = initPropertyDefaultValue(objValue);
                    collection.add(childObj);
                    method.invoke(obj, collection);
                }else if (Map.class.isAssignableFrom(clazz)){
                    Map map = Maps.newHashMap();
                    method.invoke(obj, map);
                }else {
                    method.invoke(obj, initPropertyDefaultValue(clazz.newInstance()));
                }
            } catch (Exception e) {
               log.error("{}参数初始化出现异常:{},e:",obj,e.getMessage(),e);
            }
        }
        return obj;
    }
posted @ 2021-06-24 09:34  大道至简、  阅读(411)  评论(0)    收藏  举报