public static Object parseXmlToObject(Element ele, Class<?> clas)
throws Exception {
Field[] fields = clas.getDeclaredFields();
List<?> childLists = ele.elements();
Object obj = clas.newInstance();
for (Object object : childLists) {
Element element = (Element) object;
String name = element.getName();
String value = element.getText();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (Field field : fields) {
field.setAccessible(true);
String fieldName = field.getName();
if (name.equals(fieldName)) {
String setMethodName = "set"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
Class<?> type = field.getType();
Method method = clas.getMethod(setMethodName, type);
method.setAccessible(true);
Object parseVal = null;
if (type == Date.class ) {
parseVal = sdf.parse(value);
} else if (type == String.class) {
parseVal = value.toString();
} else if ((type == Integer.class || type == Integer.TYPE) ) {
parseVal = Integer.parseInt(value.toString());
} else if ((type == Double.class || type == Double.TYPE) ) {
parseVal = Double.parseDouble(value.toString());
} else if ((type == Float.class || type == Float.TYPE) ) {
parseVal = Float.parseFloat(value.toString());
} else if ((type == Short.class || type == Short.TYPE)) {
parseVal = Short.parseShort(value.toString());
} else if ((type == Long.class || type == Long.TYPE)) {
parseVal = Long.parseLong(value.toString());
} else if ((type == BigDecimal.class || type == BigDecimal.class)) {
parseVal = new BigDecimal(value.toString());
} else {
parseVal = value;
}
method.invoke(obj, parseVal);
}
}
}
return obj;
}
主要实现对xml元素的自动转换成对象并赋值
主要知识点
- 泛型 <?>
- 反射
2.1 获取 字段getDeclaredFields
2.2 获取 方法getMethod
通过字段的名称拼接前缀生成方法名 - 字段可访问性设置,
field.setAccessible
方法method.setAccesssible
- 类型判断
isinstance
或 ·==
- 反射方法调用
method.invoke(object,args)