wrong number of arguments,java方法反射时数组参数的坑

原创
2016/03/10 12:48
阅读数 1.3K

java方法中只有一个参数是数组,反射的时候我们不能想当然的传歌数组进去,传数组进去的时候表示多个参数。 
两个数组不是一个意思啊。 
我们应该把数组转为objet,这样才表示一个参数。
 

 

 import java.lang.reflect.Method;
public class MethodTest {
 public void a(String[] args) {
  System.out.println("a");
 }
 public static void main(String[] args) throws Exception {
  MethodTest obj = new MethodTest();
  Method m = obj.getClass().getMethod("a", String[].class);
  m.invoke(obj, new String[1]);  // new String[1] 其实是null,是一个object
  m.invoke(obj, (Object) new String[] {}); // 这里强制转成了object,所以也是object
  m.invoke(obj, new String[] {}); // 报错,这里是个数组,是个object数组,a方法只有一个参数,所以报错
 }
}

结果是 
a 
a 
Exception in thread "main" 
java.lang.IllegalArgumentException: wrong number of arguments 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 

展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部