遍歷java物件中的私有屬性,將null替換為“”
阿新 • • 發佈:2019-01-05
package com.yu.killnull; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Created with Yang Xiaolei * Date: 2018/6/28 * Time: 14:16 */ public class KillNullUtil { public static Object killNull(Object object) throws Exception{ //遍歷object類 成員為String型別 屬性為空的全部替換為"" Field[] fields = object.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { // 獲取屬性的名字 String name = fields[i].getName(); // 將屬性的首字元大寫,方便構造get,set方法 name = name.substring(0, 1).toUpperCase() + name.substring(1); // 獲取屬性的型別 String type = fields[i].getGenericType().toString(); // 如果type是類型別,則前面包含"class ",後面跟類名 if (type.equals("class java.lang.String")) { Method m = object.getClass().getMethod("get" + name); // 呼叫getter方法獲取屬性值 String value = (String) m.invoke(object); if (value == null) { Class[] parameterTypes = new Class[1]; parameterTypes[0] = fields[i].getType(); m = object.getClass().getMethod("set" + name, parameterTypes); String string = new String(""); Object[] objects = new Object[1]; objects[0] = string; m.invoke(object, objects); } } //將形參object類中在com.yu.killnull包下的引用一塊遍歷修改 if (type.contains("class com.yu.killnull")){ Method m = object.getClass().getMethod("get" + name); // 呼叫getter方法獲取屬性值 Object value = m.invoke(object); killNull(value); } } return object; } }