摘要:使用反射可以檢視類屬性成員變量,并且可以在運(yùn)行時(shí)。獲得屬性對象類是通過對象獲得的。示例如下數(shù)組包含類定義所有公共屬性實(shí)例。如屬性是靜態(tài)屬性,應(yīng)傳給方法,以替代例子中的參數(shù)。
使用反射可以檢視類屬性(成員變量),并且可以在運(yùn)行時(shí)get/set。這些是通過類java.lang.reflect.Field實(shí)現(xiàn)的。本文將詳細(xì)介紹javaField對象。別忘了參考Sun的JavaDoc。
獲得屬性對象Field類是通過Class對象獲得的。示例如下:
Class aClass = ...//obtain class object Field[] fields = aClass.getFields();
Field[]數(shù)組包含類定義所有公共(public)屬性實(shí)例。
如果你知道想訪問的屬性名稱,可以使用下方代碼:
Class aClass = MyObject.class Field field = aClass.getField("someField");
上訴示例將返回類MyObject定義的someField屬性對應(yīng)的Field實(shí)例,類似如下代碼:
public class MyObject{ public String someField = null; }
如果給予getField()方法的參數(shù)不存在對應(yīng)的屬性,將拋出NoSuchFieldException。
屬性名稱如已有Field實(shí)例,可以通過Field.getName()方法獲取屬性名稱,代碼如下 :
Field field = ... //obtain field object String fieldName = field.getName();屬性類型
可以使用Field.getType() 方法獲取屬性類型:
Field field = aClass.getField("someField"); Object fieldType = field.getType();獲取、設(shè)置屬性值
一旦獲得Field引用,可以使用Field.get()和Field.set()方法獲取或設(shè)置屬性值,代碼如下:
Class aClass = MyObject.class Field field = aClass.getField("someField"); MyObject objectInstance = new MyObject(); Object value = field.get(objectInstance); field.set(objetInstance, value);
傳給get和set方法的objetInstance必須是擁有指定屬性的一個(gè)類的實(shí)例。上例使用的是MyObject的實(shí)例,因?yàn)?b>someField是類MyObject的一個(gè)變量。
如屬性是靜態(tài)屬性(public static),應(yīng)傳null給get、set方法,以替代例子中的objectInstance參數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77252.html
摘要:反射非常強(qiáng)大和有用。另外,反射可以用在映射結(jié)果集的列名到對象的方法。本教程將深入介紹反射。本教程還將清除一些關(guān)于范型信息在運(yùn)行時(shí)可用性的認(rèn)知混淆。類對象使用反射時(shí),起點(diǎn)通常是需要使用反射檢視的類的對象。 Java反射可以在運(yùn)行時(shí)檢視類、接口、屬性和方法,而無需在編譯時(shí)知道類名、方法名等等。它也同樣使用反射支持實(shí)例化新的對象、調(diào)用方法和get/set屬性值。 Java反射非常強(qiáng)大和有用...
摘要:知識(shí)點(diǎn)總結(jié)反射通過反射操作類的屬性和方法知識(shí)點(diǎn)總結(jié)反射使用反射操作類的屬性和方法通過反射調(diào)用構(gòu)造方法,構(gòu)造對象其實(shí)調(diào)用無參構(gòu)造器張三調(diào)用有參構(gòu)造器李四通過反射調(diào)用普通方法獲取方法激活方法王武王武通過反射操作屬性是屬性,如果不寫會(huì)這個(gè)私有屬 Java知識(shí)點(diǎn)總結(jié)(反射-通過反射操作類的屬性和方法 ) @(Java知識(shí)點(diǎn)總結(jié))[Java, 反射] 使用反射操作類的屬性和方法: import ...
摘要:所以,我實(shí)現(xiàn)了一個(gè)稱為的類來應(yīng)用反射?,F(xiàn)在流行的語言大都支持反射。這組內(nèi)省主要是針對類進(jìn)行操作的,能夠獲取類的屬性信息??梢钥吹?,通過的內(nèi)省機(jī)制,解決了的最關(guān)鍵的問題。在封裝反射的時(shí)候,會(huì)充分考慮到各種情況。 BeanMap 學(xué)習(xí)具體的技術(shù)工具的好辦法就是些Demo、造輪子。所以,我實(shí)現(xiàn)了一個(gè)稱為BeanMap的類來應(yīng)用java反射API。 這個(gè)BeanMap的功能是將一個(gè)Bean包裝...
摘要:通過反射獲取帶參無返回值成員方法并使用設(shè)置安全檢查,訪問私有構(gòu)造函數(shù)必須創(chuàng)建實(shí)例這種不行,注意和方法需要傳遞參數(shù)測試復(fù)制這個(gè)功能獲取私有方法,同樣注意和的區(qū)別賦予訪問權(quán)限調(diào)用方法。 反射 目錄介紹 1.反射概述 1.1 反射概述 1.2 獲取class文件對象的三種方式 1.3 反射常用的方法介紹 1.4 反射的定義 1.5 反射的組成 1.6 反射的作用有哪些 2.反射的...
近期在維護(hù)公司項(xiàng)目的時(shí)候遇到一個(gè)問題,因?yàn)閷?shí)體類中的 set 方法涉及到了業(yè)務(wù)邏輯,因此在給對象賦值的過程中不能夠使用 set 方法,為了實(shí)現(xiàn)功能,所以采用了反射的機(jī)制給對象屬性賦值,借此機(jī)會(huì)也了解了反射的一些具體用法和使用場景,分以下兩點(diǎn)對反射進(jìn)行分析: 反射的優(yōu)勢和劣勢 反射的應(yīng)用場景 反射的優(yōu)勢和劣勢 ??個(gè)人理解,反射機(jī)制實(shí)際上就是上帝模式,如果說方法的調(diào)用是 Java 正確的打開方式...
摘要:反射機(jī)制的應(yīng)用實(shí)例在泛型為的中存放一個(gè)類型的對象。工廠模式可以參考現(xiàn)在我們利用反射機(jī)制實(shí)現(xiàn)工廠模式,可以在不修改工廠類的情況下添加任意多個(gè)子類。 學(xué)習(xí)交流群:669823128java 反射 定義 功能 示例概要:Java反射機(jī)制詳解| |目錄 1反射機(jī)制是什么 2反射機(jī)制能做什么 3反射機(jī)制的相關(guān)API 通過一個(gè)對象獲得完整的包名和類名 實(shí)例化Class類對象 獲取一個(gè)對象的父類與...
閱讀 1315·2021-11-15 11:37
閱讀 3505·2021-11-11 16:55
閱讀 1756·2021-08-25 09:39
閱讀 3220·2019-08-30 15:44
閱讀 1735·2019-08-29 12:52
閱讀 1409·2019-08-29 11:10
閱讀 3244·2019-08-26 11:32
閱讀 3227·2019-08-26 10:16