來源: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