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. 2014_07_11_VGA基础及封装

    -- VR1201 Color Filter LCOS Microdisplays QVGA (320*240 Pixel) Color Filter LCOS Microdisplays -- VR ...

  2. AndroidStudio中默认不导入org.apache.http等包的解决方法

    参考:http://www.cnblogs.com/xiadongqing/p/5942459.html Eclipse ADT中默认引入了org.apache.http包,而AndroidStudi ...

  3. 适合 JS 新手学习的开源项目——在 GitHub 学编程

    作者:HelloGitHub-小鱼干 这里是 HelloGitHub 的<GitHub 上适合新手的开源项目>系列的最后一篇,系列文章: C++ 篇 Python 篇 Go 篇 Java ...

  4. 欢迎使用CSDN-markdown编辑器(这个只能看到一次保存一下)

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接 ...

  5. 第6.3节 Python动态执行之动态编译的compile函数

    Python支持动态代码主要三个函数,分别是compile.eval和exec.本节介绍compile函数的语法和相关使用.compile函数用来编译一段字符串的源码,将其编译为字节码或者AST(抽像 ...

  6. Hangfire&Autofac与ASP.NET CORE注入失败

    Hangfire.Autofac与ASP.NET CORE注入失败 项目里面使用了Hangfire,因为之前没用过吧,遇到了个问题,就是使用了ico容器后,再用Hangfire总是注入不上对象,总是后 ...

  7. Day7 Scrum 冲刺博客

    一.站立式会议1. 会议照片 2. 工作进度+燃尽图 团队成员 昨日完成工作 今日工作计划 遇到的困难  周梓波  添加键盘监听事件 由于游戏中计分规则不合理,进行重新设计  无  纪昂学  添加方块 ...

  8. 串口数据监视-Bus Hound

    Bus Hound使用说明 一.打开该工具,会看到最上面的六个图标:1.Capture(捕捉按钮):按下它选择捕捉数据界面2.Save(保存按钮):按下它选择保存数据界面3.Setting(设置按钮) ...

  9. Kubernetes Python Client 初体验之安装授权

    最近想做一个基于flask的云平台管理服务器,利用python调用kubenetes提供的API来实现云平台的操作.笔者使用的是Windows,kubernetes集群安装在Ubuntu和Respbi ...

  10. js实现元素范围内拖动

    元素拖拽,网上一堆的实现,其中很多是原生js写的,都不够简洁,甚至运行后看不到效果. 于是乎,安静地想了下,拖动元素貌似就是一个滑动事件的监听处理,具体操作如下: 1.一个外层DIV,或者直接用根节点 ...