发布于2020-11-19 20:40 阅读(1253) 评论(0) 点赞(19) 收藏(2)
List范型使用Java反射Demo
- public static <T> T parseXmlNode(T t, Element root) {
- Field[] declaredFields = t.getClass().getDeclaredFields();
-
- for (Field field : declaredFields) {
- try {
- Class<?> type = field.getType();
-
- if(List.class.getTypeName().equals(type.getName())){
- //List
- List list = new ArrayList<>();
- List<Element> parentNodeList = XmlUtil.getElements(root, field.getName());
- for (Element parentNode : parentNodeList) {
- ParameterizedType listGenericType = (ParameterizedType) field.getGenericType();
- Class<T> t1 = (Class<T>) listGenericType.getActualTypeArguments()[0];
- T instance = t1.newInstance();
- //递归
- instance = parseBiXmlNode(instance, parentNode);
- list.add(instance);
- }
- String fieldName = field.getName();
- String setMethodName = getFieldSetMethodName(fieldName);
-
- Method method = t.getClass().getMethod(setMethodName, type);
- method.invoke(t, list);
- } else if (String.class.getName().equals(type.getName())) {
- //String
- String fieldName = field.getName();
- String setMethodName = getFieldSetMethodName(fieldName);
- Method method = t.getClass().getMethod(setMethodName, String.class);
- method.invoke(t, getXmlNodeValue(root, fieldName));
- } else {
- Element parentNode = XmlUtil.getElement(root, field.getName());
- T t1 = (T) type.newInstance();
- t1 = parseBiXmlNode(t1, parentNode);
- String fieldName = field.getName();
- String setMethodName = getFieldSetMethodName(fieldName);
- Method method = t.getClass().getMethod(setMethodName, type);
- method.invoke(t, t1);
- }
- } catch (InstantiationException e) {
- log.error("parseXmlNode error, field={}, error={}", field.getName(), e);
- } catch (IllegalAccessException e) {
- log.error("parseXmlNode error, field={}, error={}", field.getName(), e);
- } catch (NoSuchMethodException e) {
- log.error("parseXmlNode error, field={}, error={}", field.getName(), e);
- } catch (InvocationTargetException e) {
- log.error("parseXmlNode error, field={}, error={}", field.getName(), e);
- } catch (Exception e) {
- log.error("parseXmlNode error, field={}, error={}", field.getName(), e);
- }
- }
-
- return t;
- }
原文链接:https://blog.csdn.net/niuhea/article/details/109748543
作者:长这么胖
链接:http://www.javaheidong.com/blog/article/966/8734b80c52a43627ff71/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!