java反射機(jī)制根據(jù)屬性名獲取屬性值的操作
一、考慮安全訪問范圍內(nèi)的屬性,沒有權(quán)限訪問到的屬性不讀取
/** * 根據(jù)屬性名獲取屬性值 * * @param fieldName * @param object * @return */ private String getFieldValueByFieldName(String fieldName, Object object) { try { Field field = object.getClass().getField(fieldName); //設(shè)置對(duì)象的訪問權(quán)限,保證對(duì)private的屬性的訪問 return (String)field.get(object); } catch (Exception e) { return null; } }
二、不考慮從祖先類繼承的屬性,只獲取當(dāng)前類屬性,包括四類訪問權(quán)限,private,protect,default,public
/** * 根據(jù)屬性名獲取屬性值 * * @param fieldName * @param object * @return */ private String getFieldValueByFieldName(String fieldName, Object object) { try { Field field = object.getClass().getDeclaredField(fieldName); //設(shè)置對(duì)象的訪問權(quán)限,保證對(duì)private的屬性的訪問 field.setAccessible(true); return (String)field.get(object); } catch (Exception e) { return null; } }
三、考慮父類繼承過來的屬性,包括四類訪問權(quán)限,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) { // 這里甚么都不能拋出去。 // 如果這里的異常打印或者往外拋,則就不會(huì)進(jìn)入 } } return field; }
補(bǔ)充知識(shí):java 通過反射拿到類(對(duì)象)所有屬性的名字
在某些場(chǎng)合,我們可能只需要拿到一個(gè)對(duì)象的屬性名即可,不需要拿到方法。
比如說,在不借助于Hibernate或是Mybatis框架的時(shí)候,我們希望能夠?qū)懸粋€(gè)父類完成所有表的增刪改成,并且通過使用Object類的方式來使所有的子類都能使用父類方法。
下來的代碼是一個(gè)使用反射的方法來拿到對(duì)象的所有屬性。
public static void getFieldName(Object t){ Class clazz = t.getClass(); // 獲取實(shí)體類的所有屬性信息,返回Field數(shù)組 Field[] fields = clazz.getDeclaredFields(); int length= fields.length; while(length-->0) { System.out.println(fields[length].getName()); } }
當(dāng)然,通過反射的方式我們還可以做很多很多很多事情,但是這里不重復(fù)舉例子了。
但是很值得說的就是,這些方法在java web編程的時(shí)候可能用得到,尤其是不借助于別人的框架,要自己寫框架的時(shí)候。
對(duì)bean的操作還可以使用BeanUtils,這個(gè)是Apache軟件基金會(huì)提供的,用于操作JavaBean的API。
以上這篇java反射機(jī)制根據(jù)屬性名獲取屬性值的操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java中HashMap.values()轉(zhuǎn)為ArrayList()問題
這篇文章主要介紹了java中HashMap.values()轉(zhuǎn)為ArrayList()問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Spring-Security對(duì)HTTP相應(yīng)頭的安全支持方式
這篇文章主要介紹了Spring-Security對(duì)HTTP相應(yīng)頭的安全支持方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Java后端實(shí)現(xiàn)生成驗(yàn)證碼圖片的示例代碼
驗(yàn)證碼是一種用于驗(yàn)證用戶身份或確保用戶操作安全的技術(shù)手段,通常以圖形、聲音或文字的形式出現(xiàn),本文主要介紹了如何通過java實(shí)現(xiàn)生成驗(yàn)證碼圖片,需要的可以參考下2023-12-12Jmeter后置處理器實(shí)現(xiàn)過程及方法應(yīng)用
這篇文章主要介紹了Jmeter后置處理器實(shí)現(xiàn)過程及方法應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09SPRING FRAMEWORK BEAN作用域和生命周期原理解析
這篇文章主要介紹了SPRING FRAMEWORK BEAN作用域和生命周期原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01