黑马程序员技术交流社区
标题:
学习反射的时候碰到newInstance那里报错
[打印本页]
作者:
nestor
时间:
2014-4-17 09:06
标题:
学习反射的时候碰到newInstance那里报错
本帖最后由 nestor 于 2014-4-17 14:54 编辑
代码:
package javaGXJS.fanShe;
import java.lang.reflect.Constructor;
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.age=age;
this.name=name;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString(){
return "["+this.name+" "+this.age+"]";
}
}
class reflect{
public static void main(String[] args) throws Exception {
Class demo=Class.forName("javaGXJS.fanShe.Person");
Person per1=new Person();
Person per2=null;
Person per3=null;
Person per4=null;
//取得全部的构造函数
Constructor[] cons=Class.forName("javaGXJS.fanShe.Person").getConstructors();
per1=(Person)cons[0].newInstance(new Person());
per2=(Person)cons[1].newInstance("Rollen");
per3=(Person)cons[2].newInstance(20);
per4=(Person)cons[3].newInstance("Rollen",20);
System.out.println(cons[0]);
System.out.println(cons[1]);
System.out.println(cons[2]);
System.out.println(cons[3]);
}
}
复制代码
报错代码:
per1=(Person)cons[0].newInstance(new Person());
per2=(Person)cons[1].newInstance("Rollen");
per3=(Person)cons[2].newInstance(20);
per4=(Person)cons[3].newInstance("Rollen",20);
错误信息:
Exception in thread "main" 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:526)
at javaGXJS.fanShe.reflect.main(dfgfdgfdg.java:45)
复制代码
作者:
⒈心只霸占沵
时间:
2014-4-17 09:51
//取得全部的构造函数 这里获取的是构造函数
Constructor[] cons=Class.forName("javaGXJS.fanShe.Person").getConstructors();
//你用构造函数newInstance 是构造函数的实例 它的类型还是构造函数的类型啊,怎么能转成Person呢?
per1=(Person)cons[0].newInstance(new Person());
per2=(Person)cons[1].newInstance("Rollen");
per3=(Person)cons[2].newInstance(20);
per4=(Person)cons[3].newInstance("Rollen",20);
复制代码
作者:
shi0000
时间:
2014-4-17 09:55
本帖最后由 shi0000 于 2014-4-17 10:23 编辑
因为输出的构造方法,不是你给定的顺序,而且你 第一个不能再括号里放入对象new Person()刚才测试了以下,构造方法依次是
per1=(Person)cons[0].newInstance(); //这里没有new Person()
per2=(Person)cons[1].newInstance("Rollen");
per3=(Person)cons[2].newInstance(20);
per4=(Person)cons[3].newInstance("Rollen",20);
而且一般情况下,你是要判断参数来确定构造函数的
作者:
呆呆沙师妹
时间:
2014-4-17 10:12
同意,你将你main程序中的代码稍微调整下就能通过了。
public static void main(String[] args) throws Exception {
Class demo = Class.forName("Person");
Person per1=new Person();
Person per2=null;
Person per3=null;
Person per4=null;
//取得全部的构造函数
Constructor[] cons=Class.forName("Person").getConstructors();
System.out.println(cons[0]);
System.out.println(cons[1]);
System.out.println(cons[2]);
System.out.println(cons[3]);
per1=(Person)cons[0].newInstance("Rollen",20);
per2=(Person)cons[1].newInstance(20);
per3=(Person)cons[2].newInstance();
per4=(Person)cons[3].newInstance("Rollen");
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2