Java反射处理数组和可变参数

字体大小: 中小 标准 ->行高大小: 标准

Java反射中,如果Method的参数里含有数组或者可变参数形式,那么在调用Invoke的时候,稍有点诡异,这里记录一下。可变参数实质就是数组,调用方式和普通数组一样。

 

先看一个简单的类

Java代码  
  1. public class Target {   
  2.   
  3.     public void arrayInput(String[] inputs) {   
  4.         for (String each : inputs) {   
  5.             System.out.print(each);   
  6.         }   
  7.         System.out.println();   
  8.     }   
  9. }  

 看如何反射调用含数组参数的方法

Java代码  
  1. import java.lang.reflect.Array;   
  2. import java.lang.reflect.Method;   
  3.   
  4. public class ArrayReflection {   
  5.   
  6.     public static void main(String[] args) {   
  7.   
  8.         Class<Target> clazz = Target.class;   
  9.   
  10.         try {   
  11.             Object object = clazz.newInstance();   
  12.   
  13.             // 数组参数的调用方法   
  14.             Method arrayInputMethod = clazz.getMethod("arrayInput",   
  15.                     String[].class);   
  16.             // 写法一,可以理解   
  17.             Object arrayObj = Array.newInstance(String.class2);   
  18.             Array.set(arrayObj, 0"Hello");   
  19.             Array.set(arrayObj, 1"World");   
  20.   
  21.             arrayInputMethod.invoke(object, arrayObj);   
  22.   
  23.             // 写法二,按照Eclipse提示写出来的,不理解   
  24.             String[] stringArray = new String[]{"Cafe","Baby"};   
  25.             arrayInputMethod.invoke(object, new Object[] { stringArray });   
  26.   
  27.         } catch (Exception e) {   
  28.             e.printStackTrace();   
  29.         }   
  30.     }   
  31. }  

 看输出:



 如果这样写

Java代码  
  1. arrayInputMethod.invoke(object, new String[]{"wrong","style"});  

 会报如下错误

 java.lang.IllegalArgumentException: wrong number of arguments

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/70352.html