日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 使用反射调用可变参数方法

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 使用反射调用可变参数方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用反射操作對象-調用可變參數方法

?

要把可變參數都當做是其對應的數組類型參數;

如 show(XX... is)作為show(XX[] is)調用;

?

若可變參數元素類型是引用類型:

JDK內部接收到參數之后,會自動拆包取出參數再分配給該底層方法,為此我們需要把這個數組實參先包裝成一個Object對象或把實際參數作為一個Object一維數組的元素再傳遞。

?

若可變參數元素類型是基本類型:

JDK內部接收到參數之后,不會拆包,所以可以不必再封裝.不過封裝了也不會錯.所以建議,不管基本類型還是引用類型都使用Object[]封裝一層,保證無誤.

?

例子

package junereflect624;

//可變參數的方法調用

?

import java.lang.reflect.Method;

?

class VaryMethod{

??? public static void show(int ...args){

??? ??? System.out.println("基本數據類型傳遞過來了!");

??? }

??? /*public static void show(int[] args){//這是一樣的

??? }*/

??? public static void show(String ...args){

??? ??? System.out.println("引用數據類型傳遞過來了!");

??? }

}

?

public class InvokeVaryDemo10 {

??? public static void main(String[] args) throws Exception{

??? ??? Class<VaryMethod> c = VaryMethod.class;

??? ???

??? ??? Method m = c.getMethod("show",int[].class);

??? ??? m.invoke(null,new int[]{1,2,3});

??? ??? m = c.getMethod("show",String[].class);

??? ??? //m.invoke(null,new String[]{"A","B","C"});//ERROR

??? ??? m.invoke(null,(Object)new String[]{"A","B","C"});//YES,強轉為Object類型

??? ??? m.invoke(null,new Object[]{new String[]{"A","B","C"}});//推薦寫法

??? }

}

轉載于:https://www.cnblogs.com/fanweisheng/p/11136836.html

總結

以上是生活随笔為你收集整理的java 使用反射调用可变参数方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。