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

 更新时间:2017年01月19日 09:10:48   投稿:lqh  
这篇文章主要介绍了 java 利用反射机制,获取实体所有属性和方法,并对属性赋值的相关资料,需要的朋友可以参考下

一个普通的实体Person:

private int id;
private String name;
private Date createdTime;
...
//其它字段
// get set方法
...............

现在需要把通过webService传过来的实体Person里面的所有字段的null值,换成""

实现思路:

1.获取实体的所有字段,遍历
2.获取字段类型
3.调用字段的get方法,判断字段值是否为空
4.如果字段值为空,调用字段的set方法,为字段赋值

code:

   Field[] field = model.getClass().getDeclaredFields(); // 获取实体类的所有属性,返回Field数组
    try {
      for (int j = 0; j < field.length; j++) { // 遍历所有属性
        String name = field[j].getName(); // 获取属性的名字
        name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
        String type = field[j].getGenericType().toString(); // 获取属性的类型
        if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
          Method m = model.getClass().getMethod("get" + name);
          String value = (String) m.invoke(model); // 调用getter方法获取属性值
          if (value == null) {
            m = model.getClass().getMethod("set"+name,String.class);
            m.invoke(model, "");
          }
        }
        if (type.equals("class java.lang.Integer")) {
          Method m = model.getClass().getMethod("get" + name);
          Integer value = (Integer) m.invoke(model);
          if (value == null) {
            m = model.getClass().getMethod("set"+name,Integer.class);
            m.invoke(model, 0);
          }
        }
        if (type.equals("class java.lang.Boolean")) {
          Method m = model.getClass().getMethod("get" + name);
          Boolean value = (Boolean) m.invoke(model);
          if (value == null) {
            m = model.getClass().getMethod("set"+name,Boolean.class);
            m.invoke(model, false);
          }
        }
        if (type.equals("class java.util.Date")) {
          Method m = model.getClass().getMethod("get" + name);
          Date value = (Date) m.invoke(model);
          if (value == null) {
            m = model.getClass().getMethod("set"+name,Date.class);
            m.invoke(model, new Date());
          }
        }
         // 如果有需要,可以仿照上面继续进行扩充,再增加对其它类型的判断
      }
    } catch (NoSuchMethodException e) {
      e.printStackTrace();
    } catch (SecurityException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    } catch (IllegalArgumentException e) {
      e.printStackTrace();
    } catch (InvocationTargetException e) {
      e.printStackTrace();
    }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Java类型通配符应用实战分析

    Java类型通配符应用实战分析

    这篇文章主要介绍了Java类型通配符应用实战,简单分析了Java类型通配符概念、原理并结合实例形式给出了Java类型通配符相关使用技巧,需要的朋友可以参考下
    2019-07-07
  • 详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)

    详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)

    这篇文章主要介绍了详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Java中ByteBuffer的allocate方法 和allocateDirect方法的区别和选用原则解析

    Java中ByteBuffer的allocate方法 和allocateDirect方法的区别和选用原则解析

    在Java中,ByteBuffer是java.nio包中的一个类,用于处理字节数据,ByteBuffer提供了两种方式来分配内存:allocate和allocateDirect,这篇文章主要介绍了Java中ByteBuffer的allocate方法 和allocateDirect方法的区别和选用原则 ,需要的朋友可以参考下
    2023-12-12
  • SpringBoot在项目中访问静态资源步骤分析

    SpringBoot在项目中访问静态资源步骤分析

    今天在玩SpringBoot的demo的时候,放了张图片在resources目录下,启动区访问的时候,突然好奇是识别哪些文件夹来展示静态资源的, 为什么有时候放的文件夹不能显示,有的却可以
    2023-01-01
  • Java多线程之定时器Timer的实现

    Java多线程之定时器Timer的实现

    定时/计划功能在Java应用的各个领域都使用得非常多,比方说Web层面。本文主要为大家介绍了Java多线程中定时器Timer的实现,感兴趣的小伙伴可以了解一下
    2022-10-10
  • Java HashMap两种简便排序方法解析

    Java HashMap两种简便排序方法解析

    这篇文章主要介绍了Java HashMap两种简便排序方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 给@Value设置默认值以及为static变量赋值问题

    给@Value设置默认值以及为static变量赋值问题

    在Spring框架中,@Value注解用于属性注入,可将配置文件中的值赋给变量,未指定默认值时,若配置文件缺少相应属性,程序启动会报错,可通过设定默认值防止此问题,对于静态变量,由于@Value无法直接注入,需通过Set方法赋值,该方法也支持默认值设置
    2024-09-09
  • 浅谈springboot多模块(modules)开发

    浅谈springboot多模块(modules)开发

    这篇文章主要介绍了浅谈springboot多模块(modules)开发,详细的介绍了springboot多模块的实现,有兴趣的可以了解一下
    2017-09-09
  • Java多线程实现之Executor详解

    Java多线程实现之Executor详解

    这篇文章主要介绍了Java多线程实现之Executor详解,Executor 给他一个 Runnable,他就能自动很安全的帮你把这个线程执行完毕
    Executor 通过创建线程池的方式来管理线程,需要的朋友可以参考下
    2023-08-08
  • 迅速学会@ConfigurationProperties的使用操作

    迅速学会@ConfigurationProperties的使用操作

    这篇文章主要介绍了迅速学会@ConfigurationProperties的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论