在Java反射中Field用于獲取某個(gè)類的屬性或該屬性的屬性值
一:如何通過(guò)Field反射獲取類的屬性
Field提供如下幾種方法:
:1:Class.getDeclaredField(String name);
返回一個(gè) Field 對(duì)象,該對(duì)象反映此 Class 對(duì)象所表示的類或接口的指定已聲明字段(包括私有成員)。
2:Class.getDeclaredFields();
返回 Field 對(duì)象的一個(gè)數(shù)組,該數(shù)組包含此 Class 對(duì)象所表示的類或接口所聲明的所有字段(包括私有成員)。
3:Class.getField(String name);
返回一個(gè) Field 對(duì)象,它反映此 Class 對(duì)象所表示的類或接口的指定公共成員字段。
4:Class.getFields();
返回一個(gè)包含某些 Field 對(duì)象的數(shù)組,該數(shù)組包含此 Class 對(duì)象所表示的類或接口的所有可訪問(wèn)公共字段。
下面一個(gè)例子說(shuō)明如何通過(guò)Field反射獲取類中的屬性
我們先定義一個(gè)普通類Person
包含三個(gè)屬性 公有name 私有age、sex 下面開(kāi)始通過(guò)Field反射的各方法訪問(wèn)屬性通過(guò)上面程序也可以發(fā)現(xiàn) Class.getField(String
name)和Class.getFields()都只能返回公有屬性,如果訪問(wèn)私有屬性就會(huì)報(bào)錯(cuò)java.lang.NoSuchFieldException。
運(yùn)行結(jié)果: 二:獲取屬性的屬性值并修改屬性值
獲取屬性的值用get(Object obj)的方法,但是獲取私有屬性的時(shí)候必須先設(shè)置Accessible為true,然后才能獲取。
下面咱們獲取Person各屬性的屬性值并將姓名屬性值修改
Test.java(右擊圖片-新頁(yè)簽打開(kāi)-看大圖)
從上面程序我們得知,通過(guò)get(Object obj)獲取屬性的值,通過(guò)set(Object obj,value)重新設(shè)置新的屬性值,并且當(dāng)我們需要獲取私有屬性的屬性值得時(shí)候,我們必須設(shè)置Accessible為true,然后才能獲取。
運(yùn)行結(jié)果:
|