Java反射java.lang.IllegalArgumentException: wrong number of arguments错误解析

 

转自:http://redarmychen.iteye.com/blog/924134


引起错误的源码:

public Student(String strs[]){  
    System.out.println(strs.length);  
}  

执行代码:

//解析:public cn.csdn.reflect.Student(java.lang.String[])  
@Test  
public void test4()throws Exception{  
    //1、加载类  
    Class cls = Class.forName("cn.csdn.reflect.Student");  
    //2、根据构造器参数类型获取相应的构造器对象      
    Constructor csr = cls.getConstructor(String[].class);  
    //3、创建实体对象  
    Student entity = (Student)csr.newInstance(new String[]{});  
    //4、调用方法  
    entity.study();  
}  

编译环境:jdk1.6

错误分析:由于Student(String strs[])构造器只有一个String数组的参数所以这是编译器会把字符串数组当作一个可变长度参数传给对象strs,而我们取得方法只有一个参数,所以就会出现wrong number of arguments的异常,我们只要把字符串数组强制转换为一个Object对象就可以解决这个异常了。

解决方案: 

//解析:public cn.csdn.reflect.Student(java.lang.String[])  
@Test  
public void test4()throws Exception{  
    //1、加载类  
    Class cls = Class.forName("cn.csdn.reflect.Student");  
    //2、根据构造器参数类型获取相应的构造器对象      
    Constructor csr = cls.getConstructor(String[].class);  
      
    String str[]={"111","123"};  
    //3、创建实体对象  
    Student entity = (Student)csr.newInstance((Object)str);  
    //4、调用方法  
    entity.study();  
}  

 

posted @ 2012-10-22 10:33  爱上飞飞的面码  阅读(1415)  评论(0)    收藏  举报