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"}});//推薦寫法

    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM