java 利用反射机制, 获取实体所有属性和方法, 并对属性赋值
这里有新鲜出炉的 Java 函数式编程, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 java 利用反射机制, 获取实体所有属性和方法, 并对属性赋值的相关资料, 需要的朋友可以参考下
一个普通的实体 Person:
- private int id;
- private String name;
- private Date createdTime;
- ...
- // 其它字段
- // get set 方法
- ...............
现在需要把通过 webService 传过来的实体 Person 里面的所有字段的 null 值, 换成 ""
实现思路:
1. 获取实体的所有字段, 遍历
2. 获取字段类型
3. 调用字段的 get 方法, 判断字段值是否为空
4. 如果字段值为空, 调用字段的 set 方法, 为字段赋值
- code: 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();
- }
来源: http://www.phperz.com/article/18/0207/358770.html