您好,登錄后才能下訂單哦!
這篇文章運用簡單易懂的例子給大家介紹使用java反射機制實現(xiàn)根據(jù)屬性名獲取屬性值,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
一、考慮安全訪問范圍內(nèi)的屬性,沒有權限訪問到的屬性不讀取
/** * 根據(jù)屬性名獲取屬性值 * * @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
/** * 根據(jù)屬性名獲取屬性值 * * @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
/** * 根據(jù)屬性名獲取屬性元素,包括各種安全范圍和所有父類 * * @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; }
補充知識:java 通過反射拿到類(對象)所有屬性的名字
在某些場合,我們可能只需要拿到一個對象的屬性名即可,不需要拿到方法。
比如說,在不借助于Hibernate或是Mybatis框架的時候,我們希望能夠?qū)懸粋€父類完成所有表的增刪改成,并且通過使用Object類的方式來使所有的子類都能使用父類方法。
下來的代碼是一個使用反射的方法來拿到對象的所有屬性。
public static void getFieldName(Object t){ Class clazz = t.getClass(); // 獲取實體類的所有屬性信息,返回Field數(shù)組 Field[] fields = clazz.getDeclaredFields(); int length= fields.length; while(length-->0) { System.out.println(fields[length].getName()); } }
關于使用java反射機制實現(xiàn)根據(jù)屬性名獲取屬性值就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。