Constructor<?> cons[]=demo.getConstructors();在JDK1.7报错,在JDK1.6可以运行
百度了一下,发现这篇文章,java反射中构造函数的问题
http://bbs.csdn.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();
}
}
}
问题解决.