1. 程式人生 > >java 反射機制--根據屬性名獲取屬性值

java 反射機制--根據屬性名獲取屬性值

obj popu null tail tools pop 對象 href pro

1.考慮安全訪問範圍內的屬性,沒有權限訪問到的屬性不讀取 [java] view plain copy
  1. /**
  2. * 根據屬性名獲取屬性值
  3. *
  4. * @param fieldName
  5. * @param object
  6. * @return
  7. */
  8. private String getFieldValueByFieldName(String fieldName, Object object) {
  9. try {
  10. Field field = object.getClass().getField(fieldName);
  11. //設置對象的訪問權限,保證對private的屬性的訪問
  12. return (String)field.get(object);
  13. } catch (Exception e) {
  14. return null;
  15. }
  16. }
2.不考慮從祖先類繼承的屬性,只獲取當前類屬性,包括四類訪問權限,private,protect,default,public [java] view plain copy
  1. /**
  2. * 根據屬性名獲取屬性值
  3. *
  4. * @param fieldName
  5. * @param object
  6. * @return
  7. */
  8. private String getFieldValueByFieldName(String fieldName, Object object) {
  9. try {
  10. Field field = object.getClass().getDeclaredField(fieldName);
  11. //設置對象的訪問權限,保證對private的屬性的訪問
  12. field.setAccessible(true);
  13. return (String)field.get(object);
  14. } catch (Exception e) {
  15. return null;
  16. }
  17. }

3.考慮父類繼承過來的屬性,包括四類訪問權限,private,protect,default,public

[java] view plain copy
    1. /**
    2. * 根據屬性名獲取屬性元素,包括各種安全範圍和所有父類
    3. *
    4. * @param fieldName
    5. * @param object
    6. * @return
    7. */
    8. private Field getFieldByClasss(String fieldName, Object object) {
    9. Field field = null;
    10. Class<?> clazz = object.getClass();
    11. for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
    12. try {
    13. field = clazz.getDeclaredField(fieldName);
    14. } catch (Exception e) {
    15. // 這裏甚麽都不能拋出去。
    16. // 如果這裏的異常打印或者往外拋,則就不會進入
    17. }
    18. }
    19. return field;
    20. }

java 反射機制--根據屬性名獲取屬性值