1. 程式人生 > 程式設計 >Java如何獲取物件屬性及對應值

Java如何獲取物件屬性及對應值

利用反射獲取物件的所有屬性及對應的值

1、獲取屬性名陣列

private static String[] getFiledName(Object o) {
    Field[] fields = o.getClass().getDeclaredFields();
    String[] fieldNames = new String[fields.length];
    for (int i = 0; i < fields.length; i++) {
      fieldNames[i] = fields[i].getName();
    }
    return fieldNames;
  }

2、根據屬性名獲取屬性值

private static Object getFieldValueByName(String fieldName,Object o) {
    try {
      String firstLetter = fieldName.substring(0,1).toUpperCase();
      String getter = "get" + firstLetter + fieldName.substring(1);
      Method method = o.getClass().getMethod(getter,new Class[] {});
      Object value = method.invoke(o,new Object[] {});
      return value;
    } catch (Exception e) {
      logger.error("獲取屬性值失敗!" + e,e);
    }
    return null;
  }

3、獲取屬性的資料型別

private static Object getFiledType(String fieldName,Object o) {
    Field[] fields = o.getClass().getDeclaredFields();
    for (Field field : fields) {
      if (Objects.equals(fieldName,field.getName())) {
        return field.getType();
      }
    }
    return null;
  }

4、完整程式碼及其引入的包

package com.hao.search;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Joiner;

public class ObjectPaseUtils {

  private static Logger logger = LoggerFactory.getLogger(ObjectPaseUtils.class);

  /**
   * @desc 將物件轉換成指定String
   * @param <T>
   * @param t
   * @return
   */
  public static <T> String objectToStr(T t) {
    List<String> list = new ArrayList<String>();
    String[] fieldNames = getFiledName(t);
    for (int i = 0; i < fieldNames.length; i++) {
      String name = fieldNames[i];
      Object value = getFieldValueByName(name,t);
      if (null != value) {
        if (getFiledType(name,t).equals(Date.class)) {
          value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date)value);
        }
        list.add(name + " : " + value);
      }
    }
    if (CollectionUtils.isNotEmpty(list)) {
      return Joiner.on("\r").skipNulls().join(list);
    }
    return null;
  }

  /**
   * @desc 獲取屬性名陣列
   * @param o
   * @return
   */
  private static String[] getFiledName(Object o) {
    Field[] fields = o.getClass().getDeclaredFields();
    String[] fieldNames = new String[fields.length];
    for (int i = 0; i < fields.length; i++) {
      fieldNames[i] = fields[i].getName();
    }
    return fieldNames;
  }

  /**
   * @desc 根據屬性名獲取屬性值
   * @param fieldName
   * @param o
   * @return
   */
  private static Object getFieldValueByName(String fieldName,e);
    }
    return null;
  }

  /**
   * @desc 獲取屬性的資料型別
   * @param fieldName
   * @param o
   * @return
   */
  private static Object getFiledType(String fieldName,field.getName())) {
        return field.getType();
      }
    }
    return null;
  }

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。