java 利用反射机制,获取实体所有属性和方法,并对属性赋值

╰+攻爆jí腚メ 2023-10-05 23:48 77阅读 0赞

一个普通的实体Person:

  1. private int id;
  2. private String name;
  3. private Date createdTime;
  4. ...
  5. //其它字段
  6. // get set方法
  7. ...............

现在需要把实体Person里面的所有字段的null值,换成””
实现思路:
1.获取实体的所有字段,遍历
2.获取字段类型
3.调用字段的get方法,判断字段值是否为空
4.如果字段值为空,调用字段的set方法,为字段赋值

  1. // 利用反射获取实体类的所有属性,返回Field数组
  2. /*****import java.lang.reflect.Field;使用这个*******/
  3. private Object getObjectNullValueToEmpty(Object object) {
  4. if (object == null) {
  5. return null;
  6. }
  7. Field[] field = model.getClass().getDeclaredFields();
  8. // 获取实体类的所有属性,返回Field数组
  9. try {
  10. for (int j = 0; j < field.length; j++) {
  11. // 遍历所有属性
  12. String name = field[j].getName();
  13. // 获取属性的名字
  14. name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
  15. String type = field[j].getGenericType().toString();
  16. // 获取属性的类型
  17. if (type.equals("class java.lang.String")) {
  18. // 如果type是类类型,则前面包含"class ",后面跟类名
  19. Method m = model.getClass().getMethod("get" + name);
  20. String value = (String) m.invoke(model);
  21. // 调用getter方法获取属性值
  22. if (value == null) {
  23. m = model.getClass().getMethod("set"+name,String.class);
  24. m.invoke(model, "");
  25. }
  26. }
  27. if (type.equals("class java.lang.Integer")) {
  28. Method m = model.getClass().getMethod("get" + name);
  29. Integer value = (Integer) m.invoke(model);
  30. if (value == null) {
  31. m = model.getClass().getMethod("set"+name,Integer.class);
  32. m.invoke(model, 0);
  33. }
  34. }
  35. if (type.equals("class java.lang.Boolean")) {
  36. Method m = model.getClass().getMethod("get" + name);
  37. Boolean value = (Boolean) m.invoke(model);
  38. if (value == null) {
  39. m = model.getClass().getMethod("set"+name,Boolean.class);
  40. m.invoke(model, false);
  41. }
  42. }
  43. if (type.equals("class java.util.Date")) {
  44. Method m = model.getClass().getMethod("get" + name);
  45. Date value = (Date) m.invoke(model);
  46. if (value == null) {
  47. m = model.getClass().getMethod("set"+name,Date.class);
  48. m.invoke(model, new Date());
  49. }
  50. }
  51.         
  52.   // 如果有需要,可以仿照上面继续进行扩充,再增加对其它类型的判断
  53. }
  54. } catch (NoSuchMethodException e) {
  55. e.printStackTrace();
  56. } catch (SecurityException e) {
  57. e.printStackTrace();
  58. } catch (IllegalAccessException e) {
  59. e.printStackTrace();
  60. } catch (IllegalArgumentException e) {
  61. e.printStackTrace();
  62. } catch (InvocationTargetException e) {
  63. e.printStackTrace();
  64. }
  65. return object;
  66. }

发表评论

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

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

相关阅读