1. 程式人生 > >遍歷java物件中的私有屬性,將null替換為“”

遍歷java物件中的私有屬性,將null替換為“”

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;
    }
}