invoke 数组_对于反射中的invoke()方法的理解
生活随笔
收集整理的這篇文章主要介紹了
invoke 数组_对于反射中的invoke()方法的理解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:碼上猿夢http://cnblogs.com/daimajun/p/6545533.html
推薦閱讀(點擊即可跳轉閱讀)
1. SpringBoot內容聚合
2. 面試題內容聚合
3. 設計模式內容聚合
4. 排序算法內容聚合
5. 多線程內容聚合
先講一下java中的反射:
反射就是將類別的各個組成部分進行剖析,可以得到每個組成部分,就可以對每一部分進行操作。在比較復雜的程序或框架中來使用反射技術,可以簡化代碼提高程序的復用性。
講的是Method類的invoke()方法。
既然是講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);}}@Testpublic void demo1() throws Exception {//獲取字節碼對象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);//調用invoke方法來調用method.invoke(m, s);} }測試會報錯:
紅色框框顯示是參數錯誤,test方法需要是字符串數組啊,我傳遞也是字符串數組,怎么就不對了??
讓我們來看一下invoke方法:
invoke方法的參數,一個是Object類型,也就是調用該方法的對象,
第二個參數是一個可變參數類型,這個可變參數類型怎么能傳遞給一個數組類型呢?一個是多個參數。一個是一個數組參數,顯然參數的個數不匹配,怎么解決呢?
解決辦法就是將可變參數變成一個參數:
- 將傳遞進去的s強轉為Object類型
- 將s重新包裝成一個Object數組
測試一下:
結果可行。
總結
以上是生活随笔為你收集整理的invoke 数组_对于反射中的invoke()方法的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么每个邮件收到后都会有一个htm的附
- 下一篇: 高并发 python socket se