很多朋友都想知道java field怎么使用?下面就一起來了解一下吧~
java在反射時候經常用到了 Field 類。
首先,用到了一個bean類,源代碼如下:
public?class?fieldDemoBean?{ ????private?int?a;?? ????public?int?b;?? ????public?String?c;?? ????public?String?d;??? ????public?fieldDemoBean(int?a,?int?b,String?c,String?d)?{?? ????????this.a?=?a;?? ????????this.b?=?b;?? ????????this.c?=?c;?? ????????this.d?=?d;?? ????}? }
利用 Field 類 使用反射改變屬性值??梢杂迷谛薷呐渲梦募稀?/p>
import?java.lang.reflect.Field; public?class?ReflectDemoTest?{
//?這里說的Field都是?類?身上的,不是實例上的
public?static?void?main(String[]?args)?throws?Exception?{ fieldDemoBean?pt1?=?new?fieldDemoBean(3,?5,?"ba",?"ab");
//?得到一個字段 Field?fieldB?=?pt1.getClass().getField("b");?//?b?是變量名 //?fieldB和pt1根本沒有什么關系,你看,是pt1.getClass(),是?字節碼?啊 //?不是pt1對象身上的變量,而是類上的,要用它取某個對象上對應的值 System.out.println(fieldB.get(pt1));?//?這才是5 Field?fieldA?=?pt1.getClass().getDeclaredField("a");?//?這個管你公的私的,都拿來 fieldA.setAccessible(true);//?添加訪問權限,才能訪問私有屬性,?不然會報錯 System.out.println(fieldA.get(pt1)); swapString(pt1); } //? 做一個實例將把一個類里所有String類型的字段里的值?b?變?a private?static?void?swapString(fieldDemoBean?pt1) throws?IllegalArgumentException,?IllegalAccessException?{ //?get?all?fields Field[]?fields?=?pt1.getClass().getFields(); for?(Field?field?:?fields)?{ //?我說的是String?類型的字段,當然要選擇一下 //?if(field.getType().equals(String.class))?{ //?字節碼都是一份的,干什么用equals啊 if?(field.getType()?==?String.class)?{ String?oldValue?=?(String)?field.get(pt1); String?newValue?=?oldValue.replace('b',?'a'); //?改?對象的字段 field.set(pt1,?newValue); } } System.out.println(pt1.c); System.out.println(pt1.d); } }
以上就是小編今天的分享,希望可以幫到大家。