日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。

發布時間:2025/3/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

首先必須明一點 Field類主要是用來輔助獲取和操作類的屬性的

1.怎么通過反射獲取類的屬性

???? 先來看JDK提供的方法有如下幾種:

???????? a)Class.getDeclaredField(String name);

?? ? 返回一個 Field 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明字段

???? b)Class.getDeclaredFields();

????? 返回 Field 對象的一個數組,這些對象反映此 Class 對象所表示的類或接口所聲明的所有字段

??? c)Class.getField(String name);

?????? 返回一個 Field 對象,它反映此 Class 對象所表示的類或接口的指定公共成員字段

??? d)Class.getField();

????????????? 返回一個包含某些 Field 對象的數組,這些對象反映此 Class 對象所表示的類或接口的所有可訪問公共字段

??? 來一個例子來說明一下 :

?? 實體類:

?import?java.util.Date; /***?@ClassName:?Student*?@Description:?學生實體*?@author?JoseanLuo??*?@date?2014-3-18?下午5:17:35*?@version?V1.0?*/ public?class?Student {private?Long?id;private?String?name;private?Date?createdate;private?String?no;public?String?nickname; public?Long?getId() {return?id; } public?void?setId(Long?id) {this.id?=?id; } public?String?getName() {return?name; } public?void?setName(String?name) {this.name?=?name; } public?Date?getCreatedate() {return?createdate; } public?void?setCreatedate(Date?createdate) {this.createdate?=?createdate; } public?String?getNo() {return?no; } public?void?setNo(String?no) {this.no?=?no; } public?String?getNickname() {return?nickname; } public?void?setNickname(String?nickname) {this.nickname?=?nickname; }}

???? 測試類:

import?java.lang.reflect.Field; import?java.util.Date; /***?@ClassName:?ReflectFieldTest*?@Description:?反射Field測試。*?@author?JoseanLuo??*?@date?2014-3-18?下午5:16:17*?@version?V1.0?*/ public?class?ReflectFieldTest {public?static?void?main(String[]?args) {????Student?stu=new?Student();stu.setId(1L);stu.setName("Josean");stu.setNo("201403185203344");stu.setCreatedate(new?Date());try{Field?property1=stu.getClass().getDeclaredField("name");System.out.println(property1);//private?java.lang.String?com.cx.test.Student.nameField?property3=stu.getClass().getField("nickname");System.out.println(property3);//public?java.lang.String?com.cx.test.Student.nickname//錯誤方法?getField系列方法只能獲取公共字段//Field?property2=stu.getClass().getField("name");//System.out.println(property2);//會拋java.lang.NoSuchFieldException}?catch?(SecurityException?e){e.printStackTrace();}?catch?(NoSuchFieldException?e){e.printStackTrace();} }}

?

2.進行屬性獲取更改

?? 得到這個Field之后你就可以獲取他的值或者設置他的值了。

?? 獲取他的值用get類型方法,他針對常見類型提供了對應get方法,這里就不一一列舉了。

?? 值得注意的是獲取私有屬性的時候必須先設置Accessible為true,然后才能獲取。

?? 同理設置的時候調用set類型方法,這里也不一一列舉了,下面放代碼。


import?java.lang.reflect.Field; import?java.util.Date; /***?@ClassName:?ReflectFieldTest*?@Description:?反射Field測試。*?@author?JoseanLuo??*?@date?2014-3-18?下午5:16:17*?@version?V1.0?*/ public?class?ReflectFieldTest {public?static?void?main(String[]?args)?throws?Exception {????Student?stu=new?Student();stu.setId(1L);stu.setName("Josean");stu.setNo("201403185203344");stu.setCreatedate(new?Date());stu.setNickname("copyman");Field?property1=stu.getClass().getDeclaredField("name");//System.out.println(property1);//out:private?java.lang.String?com.cx.test.Student.nameField?property3=stu.getClass().getField("nickname");System.out.println(property3.get(stu));//System.out.println(property3);//out:public?java.lang.String?com.cx.test.Student.nickname//錯誤方法?getField系列方法只能獲取公共字段//Field?property2=stu.getClass().getField("name");//System.out.println(property2);//會拋java.lang.NoSuchFieldExceptionField?[]?prFields4=stu.getClass().getDeclaredFields();for(Field?field:prFields4){System.out.println(field);System.out.println(field.equals(property1));//私有變量必須先設置Accessible為truefield.setAccessible(true);//獲取用get類方法。System.out.println(field.get(stu));}//設置用set類方法property3.set(stu,?"名字被我改了,哈哈");System.out.println(stu.getNickname());}}

這個是控制臺輸出:

copyman private?java.lang.Long?com.cx.test.Student.id false 1 private?java.lang.String?com.cx.test.Student.name true Josean private?java.util.Date?com.cx.test.Student.createdate false Tue?Mar?18?18:19:39?CST?2014 private?java.lang.String?com.cx.test.Student.no false 201403185203344 public?java.lang.String?com.cx.test.Student.nickname false copyman 名字被我改了,哈哈

是不是覺得很很簡單呢 。

轉載于:https://my.oschina.net/u/1407116/blog/209383

總結

以上是生活随笔為你收集整理的JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。