1.获取实体的所有字段,遍历

2.获取字段类型

3.调用字段的get方法,判断字段值是否为空

4.如果字段值为空,调用字段的set方法,为字段赋值

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 反射给字段重新赋值的更多相关文章

  1. 【译】7. Java反射——私有字段和私有方法

    原文地址:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html =================== ...

  2. Java反射给泛型集合赋值

    Java反射给泛型集合赋值 泛型 Java泛型简单描述下: 比如创建一个List集合,我想在里边只放Student对象信息,就需要写成 List<Student> studentList ...

  3. Java反射-修改字段值, 反射修改static final修饰的字段

    反射修改字段 咱们从最简单的例子到难, 一步一步深入. 使用反射修改一个private修饰符的变量name 咱们回到主题, 先用反射来实现一个最基础的功能吧. 其中待获取的name如下: public ...

  4. java反射获取字段的属性值,以及为字段赋值等方法

    1.获取某个类的属性值 /*利用getter方法获取值(首字母大写) CjJssetDTO obj: */ String filedName = "Cj"+(i+1); Class ...

  5. java 反射获取字段为List类型中的泛型类型

    在java编程时,经常会使用反射去处理对象,有时会需要知道List的泛型类型:示例操作如下 obj = pojo.newInstance(); // 首先得到pojo所定义的字段 Field[] fi ...

  6. java反射出字段信息和值

    /** * */ package test; import java.lang.reflect.Field; import java.lang.reflect.Modifier; /** * @aut ...

  7. 【译】4. Java反射——字段

    原文地址:http://tutorials.jenkov.com/java-reflection/fields.html ======================================= ...

  8. Java 反射机制学习资料

    Java反射——引言 Java反射——Class对象 Java反射——构造函数 Java反射——字段 Java反射——方法 Java反射——Getter和Setter Java反射——私有字段和私有方 ...

  9. java反射的应用+mybatis+spring动态生成数据库表

    最近接触了一个类似于代码生成工具的活.思路是,通过java的反射机制得到类的字段和字段类型, 从而可以创建一个map集合存储表名(由类名决定的特殊结构字符串),表字段(由类变量确定),表字段类型(由变 ...

随机推荐

  1. 2020年的UWP(4)——UWP和等待Request的Desktop Extension

    上一篇我们讨论了UWP和Desktop Extension交互中,Desktop Extension执行后立即退出的场景.下图是提到的四种场景分类: 执行后立即退出 等待request,处理完后退出 ...

  2. Beta冲刺——用户测试报告

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 用户测试报告 用户 ...

  3. SpringBoot中的Tomcat是如何启动的?

    <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>s ...

  4. 【NOIP2017提高A组模拟9.17】组合数问题

    [NOIP2017提高A组模拟9.17]组合数问题 题目 Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数. 举个例子,将{1,2,3}拆分成2 个 ...

  5. python核心高级学习总结3-------python实现进程的三种方式及其区别

    python实现进程的三种方式及其区别 在python中有三种方式用于实现进程 多进程中, 每个进程中所有数据( 包括全局变量) 都各有拥有⼀份, 互不影响 1.fork()方法 ret = os.f ...

  6. 基于spring@aspect注解的aop实现

    第一步:编写切面类 package com.dascom.hawk.app.web.tool; import org.aspectj.lang.JoinPoint; import org.aspect ...

  7. 第5.4节 Python函数中的变量及作用域

    一.函数中的变量使用规则 函数执行时,使用的全局空间是调用方的全局空间,参数及函数使用的局部变量存储在函数单独的局部名字空间内: 函数的形参在函数中修改了值时,并不影响调用方本身的数据,但如果形参是一 ...

  8. PyQt(Python+Qt)学习随笔:model/view架构中QTableView视图的数据无法显示问题

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在使用QTableView来显示如下数据时: 在model中插入数据是使用如下类似代码: for c ...

  9. mysql 创建新用户、数据库、授权

    创建用户 1.登录mysql mysql -uroot -p 2.创建本地用户(2.3选其一) #use mysql;             //选择mysql数据库 #create user 'w ...

  10. CommandLineRunner 可能会导致你的应用宕机停止,我劝你耗子尾汁

    hello,大家好,我是小黑,又和大家见面啦~~ 如果你去某度搜索关键词 CommandLineRunner 初始化资源 ,截止小黑同学写这篇推文之前,大概能收到 1,030,000 个结果. 网上大 ...