反射的一些用法

灰太狼 2022-05-15 10:42 366阅读 0赞
  1. /**
  2. * 根据属性名获取属性值
  3. * @param fieldName
  4. * @param object
  5. * @param <T>
  6. * @return
  7. */
  8. public static <T> T getFieldValueByFieldName(String fieldName, Object object) {
  9. try {
  10. Field field = object.getClass().getDeclaredField(fieldName);
  11. //设置对象的访问权限,保证对private的属性的访问
  12. field.setAccessible(true);
  13. return (T)field.get(object);
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. return null;
  17. }
  18. }
  19. /**
  20. * sql语句中where都是=这种判断时,如id=#{bean.id} and createTime=#{bean.createTime},
  21. * 此时ES按这种条件查询,就可以使用该方法
  22. *
  23. * @param model
  24. * @param map
  25. */
  26. public static void setKeyValue(Object model, Map<String, String> map) {
  27. try{
  28. String get = "get";
  29. // 获取实体类的所有属性,返回Field数组
  30. Field[] field = FieldUtils.getAllFields(model.getClass());
  31. // 遍历所有属性
  32. for (Field aField : field) {
  33. // 获取属性的名字
  34. String key = aField.getName();
  35. // 将属性的首字符大写,方便构造get,set方法
  36. String name = key.substring(0, 1).toUpperCase() + key.substring(1);
  37. // 获取属性的类型
  38. String type = aField.getGenericType().toString();
  39. // 如果type是类类型,则前面包含"class ",后面跟类名
  40. if (StringUtils.equals(type, String.class.toString())) {
  41. Method m = model.getClass().getMethod(get + name);
  42. // 调用getter方法获取属性值
  43. String value = (String) m.invoke(model);
  44. if (StringUtils.isNotBlank(value)){
  45. map.put(key, value);
  46. }
  47. }
  48. if (StringUtils.equals(type, Integer.class.toString())) {
  49. Method m = model.getClass().getMethod(get + name);
  50. Integer value = (Integer) m.invoke(model);
  51. if (null != value){
  52. map.put(key, String.valueOf(value));
  53. }
  54. }
  55. if (StringUtils.equals(type, Long.class.toString())) {
  56. Method m = model.getClass().getMethod(get + name);
  57. Long value = (Long) m.invoke(model);
  58. if (null != value){
  59. map.put(key, String.valueOf(value));
  60. }
  61. }
  62. if (StringUtils.equals(type, Short.class.toString())) {
  63. Method m = model.getClass().getMethod(get + name);
  64. Short value = (Short) m.invoke(model);
  65. if (null != value){
  66. map.put(key, String.valueOf(value));
  67. }
  68. }
  69. if (StringUtils.equals(type, Double.class.toString())) {
  70. Method m = model.getClass().getMethod(get + name);
  71. Double value = (Double) m.invoke(model);
  72. if (null != value){
  73. map.put(key, String.valueOf(value));
  74. }
  75. }
  76. if (StringUtils.equals(type, Boolean.class.toString())) {
  77. Method m = model.getClass().getMethod(get + name);
  78. Boolean value = (Boolean) m.invoke(model);
  79. if (null != value){
  80. map.put(key, String.valueOf(value));
  81. }
  82. }
  83. if (StringUtils.equals(type, Date.class.toString())) {
  84. Method m = model.getClass().getMethod(get + name);
  85. Date value = (Date) m.invoke(model);
  86. if (null != value){
  87. map.put(key, DateUtils.formatDate(value, DateUtils.yyyy_MM_dd_HH_mm_ss_SSS));
  88. }
  89. }
  90. if (StringUtils.equals(type, BigDecimal.class.toString())) {
  91. Method m = model.getClass().getMethod(get + name);
  92. BigDecimal value = (BigDecimal) m.invoke(model);
  93. if (null != value){
  94. map.put(key, String.valueOf(value));
  95. }
  96. }
  97. }
  98. } catch (Throwable t){
  99. throw new RuntimeException(t);
  100. }
  101. }

发表评论

表情:
评论列表 (有 0 条评论,366人围观)

还没有评论,来说两句吧...

相关阅读

    相关 使用

    概述     JAVA反射机制是在运行中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态

    相关 Java深入浅出

    刚开始接触反射这个概念,感觉反射这个机制很复杂很难懂,所以在这篇文章中对java的反射机制以个人的理解总结归纳。 1. 什么是反射? 什么是反射?在官方文档中是这样说的