java反射 反射构造函数 报 wrong number of arguments 错误

来源:互联网 发布:薛进文 饶子和 知乎 编辑:程序博客网 时间:2024/06/06 01:13

今天学习reflect时,按照网上的讲解做的例子,但是写完运行后报 wrong number of arguments

代码如下

public class ReflectCase2 {public static void main(String[] args) {//通过Class调用其他类的构造函数Class<?> clas2 = null;try {clas2 = Class.forName("com.wgw.java.reflect.test.Person");} catch (ClassNotFoundException e) {e.printStackTrace();}Person per1 = null;Person per2 = null;Person per3 = null;Person per4 = null;Constructor<?> con[] = clas2.getConstructors();try {per1 = (Person) con[0].newInstance();//从此处开始报错,就是参数的个数不对per2 = (Person) con[1].newInstance("wgw2");per3 = (Person) con[2].newInstance(30);per4 = (Person) con[3].newInstance("wgw3",40);} catch (Exception e) {e.printStackTrace();}System.out.println(per1);System.out.println(per2);System.out.println(per3);System.out.println(per4);}}class Person{private String name;private int age;public Person(){}public Person(String name){this.name = name;}public Person(int age){this.age = age;}public Person(String name,int age){this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String toString(){return "["+this.name+","+this.getAge()+"]";}}
错误信息:

java.lang.IllegalArgumentException: wrong number of argumentsat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)at java.lang.reflect.Constructor.newInstance(Constructor.java:513)at com.wgw.java.reflect.test.ReflectCase2.main(ReflectCase2.java:54)

原来通过clas2.getConstructors(); 获取的构造函数,不是按照顺序获取的,可以通过con[0].getParameterTypes()[1]   查看获取的构造函数是什么样的参数,从而确定是哪个构造函数,

        per1 = (Person) con[0].newInstance();//从此处开始报错,就是参数的个数不对per2 = (Person) con[1].newInstance("wgw2");per3 = (Person) con[2].newInstance(30);per4 = (Person) con[3].newInstance("wgw3",40);

修改为

        per1 = (Person) con[3].newInstance();        per2 = (Person) con[2].newInstance("wgw3",40);        per3 = (Person) con[1].newInstance(30);        per4 = (Person) con[0].newInstance("wgw2");

就可以正常运行,输出信息如下:

[null,0][wgw3,40][null,30][wgw2,0]


0 0