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. Beta冲刺随笔——Day_Four

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 今日事今日毕 林涛: ...

  2. 解决 win7 win10 等 64位 支持access数据库问题

    好多年不写ASP+ACCESS了,这两天帮朋友做个网站,碰到这个问题: ADODB.Connection 错误 '800a0e78' 对象关闭时,不允许操作. 记录一下. 以下内容转载自:https: ...

  3. OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析

    ☞ ░ 前往老猿Python博文目录 ░ 一.使用全局变量进行变量传递 OpenCV-Python中可以使用setMouseCallback来设置鼠标事件的回调函数,我们来看个样例. 1.1.案例1代 ...

  4. 关于open函数文件打开模式的有意思的一个现象

    老猿前阵子学习了文件IO,最近正在回顾及进行各种验证和总结,老猿在对文件进行打开后的返回值检查属性时,发现文件打开返回的文件对象的读写模式与打开文件的模式并不完全相同,如下案例: fp1 = open ...

  5. 2020中国.NET开发者峰会主题内容发布

    2020年12月09日,组委会正式发布了China .NET Conf 2020中国 .NET 开发者峰会的主题内容. 今年的大会主题收到超预期的主题,无论是数量还是质量上都比2019年有所进步,这也 ...

  6. MySQL事务(二)事务隔离的实现原理:一致性读

    今天我们来学习一下MySQL的事务隔离是如何实现的.如果你对事务以及事务隔离级别还不太了解的话,这里左转. 好的,下面正式进入主题.事务隔离级别有4种:读未提交.读提交.可重复读和串行化.首先我们来说 ...

  7. MVC-采用Bundles方式引入css和js文件

    优点:修改js或css时会自动生成hash版本号. 缺点:需要在BundleConfig中先添加对应的文件,然后在html中再引用对应的bundle,多操作了一步. web.config中 <c ...

  8. JavaScript:记录一些字符串和数组常用的方法

    字符串: 字符串的方法:注意:都不会改变原来的字符串,返回值为新的字符串.如果(1,2),一般是包含小标1,不包含下标2 str.charAt(i): 取str的第i+1个字符,类似数组的arr[i] ...

  9. 【Python】 requests 各种参数请求的方式

    Python使用requests发送post请求 1.我们使用postman进行接口测试的时候,发现POST请求方式的编码有3种,具体的编码方式如下: A:application/x-www-form ...

  10. v-text、v-html、v-pre

    v-text 用于将数据填充到标签中,作用于插值表达式类似,但是相对于直接插值是没有闪动问题的 v-html 用于将HTML片段填充到标签中,但是可能有安全问题(易被跨域脚本攻击[XSS攻击]) v- ...