1. 程式人生 > 實用技巧 >Java 根據反射機制操作實體欄位FieldUtil

Java 根據反射機制操作實體欄位FieldUtil

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/**
 * TODO
 */
public class FiledUtil {

    /*
    根據bean獲取所有欄位資訊
     */
    public List<Field> getFieldList(String bean) {
        List<Field> fieldList = new ArrayList<>();
        try {
            Class<?> clz = Class.forName(bean);
            Field[] strsSub = clz.getDeclaredFields();
            Class<?> clzSuper = Class.forName(bean).getSuperclass();
            for (Field filed : strsSub) {
                fieldList.add(filed);
            }
            if (null != clzSuper) {
                Field[] strsSuper = clzSuper.getDeclaredFields();
                for (Field filed : strsSuper) {
                    fieldList.add(filed);
                }
            }
        } catch (Exception e) {
            ExceptUtils.printStackTrace(e);
        }
        return fieldList;
    }

    /*
     * 根據屬性名獲取屬性值
     */
    public Object getFieldValueByName(String fieldName, Object obj) {
        try {
            String firstLetter = fieldName.substring(0, 1).toUpperCase();
            String getter = "get" + firstLetter + fieldName.substring(1);
            Method method = obj.getClass().getMethod(getter, new Class[] {});
            method.setAccessible(true);
            Object value = method.invoke(obj, new Object[] {});
            return value;
        } catch (Exception e) {
            ExceptUtils.printStackTrace(e);
        }
        return null;
    }

    /*
    根據欄位設定物件對應欄位值
     */
    public void setObjFieldValueByName(Object obj, String fieldName, Object fieldValue) {
        String bean = obj.getClass().getName();
        List<Field> fieldList = getFieldList(bean);
        for (Field field : fieldList) {
            if (!fieldName.equals(field.getName())) {
                continue;
            }
            field.setAccessible(true);
            try {
                field.set(obj, fieldValue);
            } catch (IllegalAccessException e) {
                ExceptUtils.printStackTrace(e);
            }
        }
    }
}