摘要:使用反射可以檢視類的方法,并在運(yùn)行時調(diào)用。獲得方法對象通過對象獲得。示例代碼如下數(shù)組擁有一個類定義的所有公共方法的實(shí)例。如果方法是靜態(tài)的,傳代替類實(shí)例。本例中,方法需要一個,所以必須提供一個類型的參數(shù)。
使用反射可以檢視類的方法,并在運(yùn)行時調(diào)用。這是通過類java.lang.reflect.Method實(shí)現(xiàn)的。本文將深入介紹Method對象。
獲得方法對象Method通過Class對象獲得。示例代碼如下:
Class aClass = ...//obtain class object Method[] methods = aClass.getMethods();
Method[] 數(shù)組擁有一個類定義的所有公共方法的實(shí)例。
如果知道方法參數(shù)的精確類型,有比獲得所有方法更優(yōu)的(獲得方法的方式)。本例中,名為doSomething的方法需要一個String類型的參數(shù):
Class aClass = ...//obtain class object Method method = aClass.getMethod("doSomething", new Class[]{String.class});
如果沒有方法匹配給定的方法名和參數(shù),如例子中的String.class,將拋出NoSuchMethodException。
如果你嘗試訪問沒有參數(shù)的方法,傳null代替參數(shù)數(shù)組,如下:
Class aClass = ...//obtain class object Method method = aClass.getMethod("doSomething", null);方法參數(shù)和返回值類型
你可以通過如下代碼獲得方法的參數(shù)類型列表:
Method method = ... // obtain method - see above Class[] parameterTypes = method.getParameterTypes();
訪問方法返回值的代碼如下:
Method method = ... // obtain method - see above Class returnType = method.getReturnType();使用方法對象調(diào)用方法
調(diào)用方法的代碼如下:
//get method that takes a String as argument Method method = MyObject.class.getMethod("doSomething", String.class); Object returnValue = method.invoke(null, "parameter-value1");
null參數(shù)是擁有你想調(diào)用方法的實(shí)例。如果方法是靜態(tài)的,傳null代替類實(shí)例。本例中,如果doSomething(String.class) 不是靜態(tài)的,必須傳有效的MyObject類的實(shí)例代替null。
Method.invoke(Object target, Object ... parameters)方法的參數(shù)是可變參,但你調(diào)用時必須保證型參、實(shí)參一一對應(yīng)。本例中,方法需要一個String,所以必須提供一個String類型的參數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77251.html
摘要:通過反射獲取帶參無返回值成員方法并使用設(shè)置安全檢查,訪問私有構(gòu)造函數(shù)必須創(chuàng)建實(shí)例這種不行,注意和方法需要傳遞參數(shù)測試復(fù)制這個功能獲取私有方法,同樣注意和的區(qū)別賦予訪問權(quán)限調(diào)用方法。 反射 目錄介紹 1.反射概述 1.1 反射概述 1.2 獲取class文件對象的三種方式 1.3 反射常用的方法介紹 1.4 反射的定義 1.5 反射的組成 1.6 反射的作用有哪些 2.反射的...
摘要:反射使用類對象提供的基本元數(shù)據(jù),能從類對象中找出方法或字段的名稱,然后獲取表示方法或字段的對象。常見的反射手段有反射和反射。以之前的反射為例其中指定了方法的返回類型,其實(shí)不止如此。 Java反射機(jī)制主要提供了以下功能: 在運(yùn)行時判斷任意一個對象所屬的類 在運(yùn)行時構(gòu)造任意一個類的對象 在運(yùn)行時判斷任意一個類所具有的成員變量和方法 在運(yùn)行時調(diào)用任意一個對象的方法 生成動態(tài)代理 很多框架...
摘要:反射機(jī)制一結(jié)合官方通過編寫的反射教程,復(fù)習(xí)一下反射的知識。反射的概念反射是一種在運(yùn)行時獲取以及修改應(yīng)用行為的一種工具。因?yàn)榉瓷湫枰獎討B(tài)的解析類的信息,相比于非反射使用的方式要慢。反射需要獲取一定的運(yùn)行時權(quán)限,在特定的安全環(huán)境下不一定存在。 Java反射機(jī)制(一) 結(jié)合Oracle官方通過JDK8編寫的反射教程,復(fù)習(xí)一下反射的知識。結(jié)尾篇補(bǔ)一個小例子。 主要內(nèi)容 這次博客的主要內(nèi)容就是簡...
摘要:反射機(jī)制的應(yīng)用實(shí)例在泛型為的中存放一個類型的對象。工廠模式可以參考現(xiàn)在我們利用反射機(jī)制實(shí)現(xiàn)工廠模式,可以在不修改工廠類的情況下添加任意多個子類。 學(xué)習(xí)交流群:669823128java 反射 定義 功能 示例概要:Java反射機(jī)制詳解| |目錄 1反射機(jī)制是什么 2反射機(jī)制能做什么 3反射機(jī)制的相關(guān)API 通過一個對象獲得完整的包名和類名 實(shí)例化Class類對象 獲取一個對象的父類與...
摘要:反射的使用通過反射獲取構(gòu)造方法并使用首先我們聲明一個類方便我們進(jìn)行介紹默認(rèn)的構(gòu)造方法默認(rèn)的構(gòu)造方法無參構(gòu)造方法調(diào)用了公有無參構(gòu)造方法執(zhí)行了。。。 1.概述 1.1 什么是反射 java反射機(jī)制是指在運(yùn)行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法,對于任意一個對象,都能調(diào)用它的任意一個方法和屬性,這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機(jī)制。 1...
閱讀 2829·2023-04-26 02:00
閱讀 2789·2019-08-30 15:54
閱讀 882·2019-08-30 11:15
閱讀 1516·2019-08-29 15:31
閱讀 929·2019-08-29 14:12
閱讀 503·2019-08-29 13:08
閱讀 853·2019-08-27 10:51
閱讀 2722·2019-08-26 12:17