java反射機制根據屬性名獲取屬性值
阿新 • • 發佈:2019-01-25
一、考慮安全訪問範圍內的屬性,沒有許可權訪問到的屬性不讀取
/** * 根據屬性名獲取屬性值 * * @param fieldName * @param object * @return */ private String getFieldValueByFieldName(String fieldName, Object object) { try { Field field = object.getClass().getField(fieldName); //設定物件的訪問許可權,保證對private的屬性的訪問 return (String)field.get(object); } catch (Exception e) { return null; } }
二、不考慮從祖先類繼承的屬性,只獲取當前類屬性,包括四類訪問許可權,private,protect,default,public
/** * 根據屬性名獲取屬性值 * * @param fieldName * @param object * @return */ private String getFieldValueByFieldName(String fieldName, Object object) { try { Field field = object.getClass().getDeclaredField(fieldName); //設定物件的訪問許可權,保證對private的屬性的訪問 field.setAccessible(true); return (String)field.get(object); } catch (Exception e) { return null; } }
三、考慮父類繼承過來的屬性,包括四類訪問許可權,private,protect,default,public
/** * 根據屬性名獲取屬性元素,包括各種安全範圍和所有父類 * * @param fieldName * @param object * @return */ private Field getFieldByClasss(String fieldName, Object object) { Field field = null; Class<?> clazz = object.getClass(); for (; clazz != Object.class; clazz = clazz.getSuperclass()) { try { field = clazz.getDeclaredField(fieldName); } catch (Exception e) { // 這裡甚麼都不能丟擲去。 // 如果這裡的異常列印或者往外拋,則就不會進入 } } return field; }