Constructor<> cons[]=demo.getConstructors();在JDK1.7出错
Constructor<?> cons[]=demo.getConstructors();在JDK1.7报错
Constructor<?> cons[]=demo.getConstructors();在JDK1.7报错,在JDK1.6可以运行
百度了一下,发现这边文章,java反射中构造函数的问题
http://bbs.****.net/topics/390183924
package Reflect; import java.lang.reflect.Constructor; class Person{ public Person() { } public Person(String name){ this.name=name; } public Person(int age){ this.age=age; } public Person(String name, int age) { this.age=age; this.name=name; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString(){ return "["+this.name+" "+this.age+"]"; } private String name; private int age; } class Hello{ public static void main(String[] args) { Class<?> demo=null; try{ demo=Class.forName("Reflect.Person"); }catch (Exception e) { e.printStackTrace(); } Person per1=null; Person per2=null; Person per3=null; Person per4=null; //取得全部的构造函数 Constructor<?> cons[]=demo.getConstructors(); try{ per1=(Person)cons[0].newInstance(); per2=(Person)cons[1].newInstance("Rollen"); per3=(Person)cons[2].newInstance(20); per4=(Person)cons[3].newInstance("Rollen",20); }catch(Exception e){ e.printStackTrace(); } System.out.println(per1); System.out.println(per2); System.out.println(per3); System.out.println(per4); } }
这段程序在JDK1.7运行出错,
null
null
null
null
java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at Reflect.hello.main(hello.java:49)
JDK1.6可以运行.
上述帖子给出方法
可以修改为
class Hello{ public static void main(String[] args) { Class<?> demo = null; try { demo = Class.forName("Reflect.Person"); Constructor cons0 = demo.getConstructor(); Constructor cons1 = demo.getConstructor(String.class); Constructor cons2 = demo.getConstructor(int.class); Constructor cons3 = demo.getConstructor(String.class,int.class); Person per1 = (Person) cons0.newInstance(); Person per2 = (Person) cons1.newInstance("Rollen"); Person per3 = (Person) cons2.newInstance(20); Person per4 = (Person) cons3.newInstance("Rollen", 20); System.out.println(per1); System.out.println(per2); System.out.println(per3); System.out.println(per4); } catch (Exception e) { e.printStackTrace(); } } }
问题解决.