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. Spring Boot系列:七、 实现Mybatis多数据源切换

    一.引入相关maven配置 mybatis;  mysql驱动:jdbc <dependency> <groupId>org.mybatis.spring.boot</g ...

  2. 记STM32F103C8T6+STLINK下载器在Keil中的设置

    调试代码为: /************************************** * 文件名 :main.c * 描述 :获取CPU的96bit ID 和 flash的大小,并通过USAR ...

  3. 数据库:Flask-SQLAlchemy

    一.安装以及使用 1.安装 安装 flask-sqlalchemy pip install flask-sqlalchemy 如果连接的是 mysql 数据库,需要安装 mysqldb pip ins ...

  4. 在执行gem install redis时 : ERROR: Error installing redis: redis requires Ruby version >= 2.2.2

    在执行gem install redis时 提示: gem install redis ERROR: Error installing redis: redis requires Ruby versi ...

  5. Python & PyQt学习随笔:PyQt主程序的基本框架

    在完成UI设计将UI通过PyUic转成Py文件后,由于这个生成的文件每次通过PyUic生成时都会被覆盖,因此应用的主程序必须另外单独编写py文件.需要将UI生成的文件import到主程序的py文件中. ...

  6. PyQt(Python+Qt)学习随笔:Qt Designer中toolBar的movable属性

    1.概述 movable属性用来确认toolBar是否可以移动,如果设置为可移动,则toolBar可以在主窗口范围内拖拽移动. 2.访问方法 通过isMovable().setMovable(bool ...

  7. git 常用命令 command

    git config --list //查看配置信息   git config user.name //查看用户名  git config user.email //查看用户邮箱 从远程克隆到本地仓库 ...

  8. 学习笔记:Splay

    代码适中.非常灵活的平衡树. 需要前置:二叉搜索树. 一些基础的函数: int idx, ch[N][2], cnt[N], sz[N], fa[N]; /* idx 是节点计数, ch[i][0 / ...

  9. Social Infrastructure Information Systems Division, Hitachi Programming Contest 2020 D题题解

    将题意转换为一开始\(t = 0\),第\(i\)个操作是令\(t \leftarrow (a_i + 1) t + (a_i + b_i + 1)\).记\(A_i = a_i + 1, B_i = ...

  10. 笔记-[ZJOI2014]力

    [ZJOI2014]力 \[\begin{split} E_j=&\sum_{i=1}^{j-1}\frac{q_i}{(i-j)^2}-\sum_{i=j+1}^{n}\frac{q_i}{ ...