本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

List范型使用Java反射Demo

发布于2020-11-19 20:40     阅读(1253)     评论(0)     点赞(19)     收藏(2)


List范型使用Java反射Demo

  1. public static <T> T parseXmlNode(T t, Element root) {
  2. Field[] declaredFields = t.getClass().getDeclaredFields();
  3. for (Field field : declaredFields) {
  4. try {
  5. Class<?> type = field.getType();
  6. if(List.class.getTypeName().equals(type.getName())){
  7. //List
  8. List list = new ArrayList<>();
  9. List<Element> parentNodeList = XmlUtil.getElements(root, field.getName());
  10. for (Element parentNode : parentNodeList) {
  11. ParameterizedType listGenericType = (ParameterizedType) field.getGenericType();
  12. Class<T> t1 = (Class<T>) listGenericType.getActualTypeArguments()[0];
  13. T instance = t1.newInstance();
  14. //递归
  15. instance = parseBiXmlNode(instance, parentNode);
  16. list.add(instance);
  17. }
  18. String fieldName = field.getName();
  19. String setMethodName = getFieldSetMethodName(fieldName);
  20. Method method = t.getClass().getMethod(setMethodName, type);
  21. method.invoke(t, list);
  22. } else if (String.class.getName().equals(type.getName())) {
  23. //String
  24. String fieldName = field.getName();
  25. String setMethodName = getFieldSetMethodName(fieldName);
  26. Method method = t.getClass().getMethod(setMethodName, String.class);
  27. method.invoke(t, getXmlNodeValue(root, fieldName));
  28. } else {
  29. Element parentNode = XmlUtil.getElement(root, field.getName());
  30. T t1 = (T) type.newInstance();
  31. t1 = parseBiXmlNode(t1, parentNode);
  32. String fieldName = field.getName();
  33. String setMethodName = getFieldSetMethodName(fieldName);
  34. Method method = t.getClass().getMethod(setMethodName, type);
  35. method.invoke(t, t1);
  36. }
  37. } catch (InstantiationException e) {
  38. log.error("parseXmlNode error, field={}, error={}", field.getName(), e);
  39. } catch (IllegalAccessException e) {
  40. log.error("parseXmlNode error, field={}, error={}", field.getName(), e);
  41. } catch (NoSuchMethodException e) {
  42. log.error("parseXmlNode error, field={}, error={}", field.getName(), e);
  43. } catch (InvocationTargetException e) {
  44. log.error("parseXmlNode error, field={}, error={}", field.getName(), e);
  45. } catch (Exception e) {
  46. log.error("parseXmlNode error, field={}, error={}", field.getName(), e);
  47. }
  48. }
  49. return t;
  50. }

 

原文链接:https://blog.csdn.net/niuhea/article/details/109748543



所属网站分类: 技术文章 > 博客

作者:长这么胖

链接:http://www.javaheidong.com/blog/article/966/8734b80c52a43627ff71/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

19 0
收藏该文
已收藏

评论内容:(最多支持255个字符)