和同学接了个外包的活,由于项目中很多地方要用到poi导出excel,而每次导出都要写很多相同的代码,因为poi的cell.setCellValue();每次设置的都是不同实体bean的属性值,导致代码里很多重复的值,我在想有没有可以自动装载bean的属性及属性值的方法。首先想到的肯定是反射,但是自己写了一下没写出来,so上网查了一下,发现了这个方法,感觉不错,就记录下来了。原文链接http://blog.csdn.net/dongzhouzhou/article/details/8446782

原文的代码如下

  1. /**
  2. * 遍历实体类的属性和数据类型以及属性值
  3. * @param model
  4. * @throws NoSuchMethodException
  5. * @throws IllegalAccessException
  6. * @throws IllegalArgumentException
  7. * @throws InvocationTargetException
  8. */
  9. public static void reflectTest(Object model) throws NoSuchMethodException,
  10. IllegalAccessException, IllegalArgumentException,
  11. InvocationTargetException {
  12. // 获取实体类的所有属性,返回Field数组
  13. Field[] field = model.getClass().getDeclaredFields();
  14. // 遍历所有属性
  15. for (int j = 0; j < field.length; j++) {
  16. // 获取属性的名字
  17. String name = field[j].getName();
  18. // 将属性的首字符大写,方便构造get,set方法
  19. name = name.substring(0, 1).toUpperCase() + name.substring(1);
  20. // 获取属性的类型
  21. String type = field[j].getGenericType().toString();
  22. // 如果type是类类型,则前面包含"class ",后面跟类名
  23. System.out.println("属性为:" + name);
  24. if (type.equals("class java.lang.String")) {
  25. Method m = model.getClass().getMethod("get" + name);
  26. // 调用getter方法获取属性值
  27. String value = (String) m.invoke(model);
  28. System.out.println("数据类型为:String");
  29. if (value != null) {
  30. System.out.println("属性值为:" + value);
  31. } else {
  32. System.out.println("属性值为:空");
  33. }
  34. }
  35. if (type.equals("class java.lang.Integer")) {
  36. Method m = model.getClass().getMethod("get" + name);
  37. Integer value = (Integer) m.invoke(model);
  38. System.out.println("数据类型为:Integer");
  39. if (value != null) {
  40. System.out.println("属性值为:" + value);
  41. } else {
  42. System.out.println("属性值为:空");
  43. }
  44. }
  45. if (type.equals("class java.lang.Short")) {
  46. Method m = model.getClass().getMethod("get" + name);
  47. Short value = (Short) m.invoke(model);
  48. System.out.println("数据类型为:Short");
  49. if (value != null) {
  50. System.out.println("属性值为:" + value);
  51. } else {
  52. System.out.println("属性值为:空");
  53. }
  54. }
  55. if (type.equals("class java.lang.Double")) {
  56. Method m = model.getClass().getMethod("get" + name);
  57. Double value = (Double) m.invoke(model);
  58. System.out.println("数据类型为:Double");
  59. if (value != null) {
  60. System.out.println("属性值为:" + value);
  61. } else {
  62. System.out.println("属性值为:空");
  63. }
  64. }
  65. if (type.equals("class java.lang.Boolean")) {
  66. Method m = model.getClass().getMethod("get" + name);
  67. Boolean value = (Boolean) m.invoke(model);
  68. System.out.println("数据类型为:Boolean");
  69. if (value != null) {
  70. System.out.println("属性值为:" + value);
  71. } else {
  72. System.out.println("属性值为:空");
  73. }
  74. }
  75. if (type.equals("class java.util.Date")) {
  76. Method m = model.getClass().getMethod("get" + name);
  77. Date value = (Date) m.invoke(model);
  78. System.out.println("数据类型为:Date");
  79. if (value != null) {
  80. System.out.println("属性值为:" + value);
  81. } else {
  82. System.out.println("属性值为:空");
  83. }
  84. }
  85. }
  86. }

由于我的实体bean里有double类型,我又不想用其封装类的方法获取值,于是我在他的基础上又加入了一段代码,

  1. if (type.equals("double")) {
  2. Method m = model.getClass().getMethod("get" + name);
  3. double value = (double) m.invoke(model);
  4. System.out.println("数据类型为:double");
  5. if (value >0) {
  6. System.out.println("属性值为:" + value);
  7. } else {
  8. System.out.println("属性值为:空");
  9. }
  10. }
  11. System.out.println("属性类型为:"+type);

这样一来,就可以知道属性类型是什么,可以很好的加判断语句了。当然原文代码还有很多值得优化的地方,我这里就没有进行优化,准备等我将它与poi导出整合之后再来优化。

【转】java遍历实体类的属性和数据类型以及属性值的更多相关文章

  1. java遍历实体类的属性和数据类型以及属性值

    遍历实体类的树形和数据类型一级属性值 /** * 遍历实体类的属性和数据类型以及属性值 * @param model * @throws NoSuchMethodException * @throws ...

  2. java遍历实体类的属性和值

    代码如下: 实体类: public class User implements Serializable { private static final long serialVersionUID = ...

  3. java中循环遍历实体类的属性和数据类型以及属性值

    package com.walkerjava.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTarg ...

  4. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...

  5. java中如何遍历实体类的属性和数据类型以及属性值

      package com.walkerjava.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTa ...

  6. Java中遍历实体类(处理MongoDB)

    在实际过程中,经常要将实体类进行封装,尤其是处理数据库的过程中:因此,对于遍历实体类能够与数据库中的一行数据对应起来. 我是使用的环境是Spring boot,访问的数据库时MongoDB 实体类遍历 ...

  7. asp.net 自动遍历实体类

    最近做项目需要读取修改前数据库中被修改的数据所有的信息,一开始想要在model层的每个类都写一个函数return一串字符串, 但是由于表太多,实体类数量太大,写出来太浪费时间,所以决定写一个通用的方法 ...

  8. 将JSON数据转换成JAVA的实体类

    思路:首先将JSON格式的数据转换成JSONObject,然后将JSONObject转换成Java的实体类(其中类属性包括List等类型) Java实体类: SearchFilter 类 1 publ ...

  9. 高速创建和mysql表相应的java domain实体类

    今天创建了一个表有十几个字段,创建完之后必定要写一个与之相应的java domain实体类. 这不是反复的工作吗?为什么不先把这个表的全部的字段查出来,然后放到linux环境下,用sed工具在每一行的 ...

随机推荐

  1. HiveSQL正则表达式的应用[转]

    最近工作中数据处理方面用到很多不是特别容易处理的数据,用正则表达式的话会让语句显得特别精简,也可以用各种字符串截取函数嵌套处理(必须要有一定规律),总结一下经常用到的几个. 1.正则的通配符简介    ...

  2. FastAdmin 的前端环境怎么安装?

    FastAdmin 的前端环境怎么安装? 安装 Git 安装 Node.js 安装 cnpm 安装 bower 开始安装 FastAdmin 的前端组件 bower install bower upd ...

  3. Windows 10 上的 Git 如何清除密码? Git Credential Manager for Windows

    Windows 10 上的 Git 如何清除密码? 因为一台新的电脑是 Windows 10 在第一次使用 Git 要求输入密码时把密码给输错了. 之前提交都是说 Token 错了,不再出现提示密码. ...

  4. C# List的深复制

    1.关于深拷贝和浅拷贝 C#支持两种类型:值类型和引用类型 值类型(Value Type):如 char, int, float,枚举类型和结构类型 引用类型(Reference Type):如Cla ...

  5. post参数的方法 json data 和特别的传参

    json格式传参: 那么久使用json的方式传参: json=payload data格式传参: 其他方式传参: 在webFormes里 value 的值不是普通的字符 要把value值先序列化在放入 ...

  6. MySQL 数据库查询练习

    -- ---------------------------- -- mysql练习sql脚本 -- ---------------------------- create database db10 ...

  7. pythonNet day03

    TCP应用之 httpserver 1.接收http请求 2.查看http请求 3.返回一个网页给客户端 # 做的是一个本地服务端,接收来自浏览器客户端的请求 from socket import * ...

  8. android中一个评分的控件

    RatingBar android中一个评分的控件 如何使用 Android Studio下: dependencies { compile 'com.hedgehog.ratingbar:app:1 ...

  9. 关于json_encode转义斜杠的问题

    加上参数  JSON_UNESCAPED_SLASHES即可 echo json_encode($data,JSON_UNESCAPED_SLASHES);

  10. spring quartz 配置及说明

    方式一,jobDetail的bean利用MethodInvokingJobDetailFactoryBean 工厂包装 : ()定义一个bean,执行具体的业务操作. <bean id=&quo ...