對于反射中的invoke()方法的理解

來源:https://www.cnblogs.com/daimajun/p/6545533.html
先講一下java中的反射:

反射就是將類別的各個組成部分進(jìn)行剖析,可以得到每個組成部分,就可以對每一部分進(jìn)行操作

在比較復(fù)雜的程序或框架中來使用反射技術(shù),可以簡化代碼提高程序的復(fù)用性。

講的是Method類的invoke()方法。


image.png

既然是講invoke方法,那就不講怎么使用反射了,代碼上來先:
package online;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.junit.Test;

public class Msym {

public void test(String[] arg){
    for (String string : arg) {
        System.out.println(string);
    }
}
@Test
public void demo1() throws Exception {
    //獲取字節(jié)碼對象
    Class<Msym> clazz = (Class<Msym>) Class.forName("online.Msym");
    //獲取一個對象
    Constructor con =  clazz.getConstructor();
    Msym m = (Msym) con.newInstance();
    String[] s = new String[]{"aa","bb"};
    //獲取Method對象
    Method method = clazz.getMethod("test", String[].class);
    //調(diào)用invoke方法來調(diào)用
    method.invoke(m, s);
}

}
測試會報錯:


image.png

紅色框框顯示是參數(shù)錯誤,test方法需要是字符串?dāng)?shù)組啊,我傳遞也是字符串?dāng)?shù)組,怎么就不對了??

讓我們來看一下invoke方法:


image.png

invoke方法的參數(shù),一個是Object類型,也就是調(diào)用該方法的對象,

第二個參數(shù)是一個可變參數(shù)類型,這個可變參數(shù)類型怎么能傳遞給一個數(shù)組類型呢?一個是多個參數(shù)。一個是一個數(shù)組參數(shù),顯然參數(shù)的個數(shù)不匹配,怎么解決呢?

解決辦法就是將可變參數(shù)變成一個參數(shù):

將傳遞進(jìn)去的s強(qiáng)轉(zhuǎn)為Object類型
將s重新包裝成一個Object數(shù)組


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容