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

浙公网安备 33010602011771号