黑马程序员技术交流社区

标题: 反射出错求解?????? [打印本页]

作者: liuyang    时间: 2012-4-18 20:15
标题: 反射出错求解??????
下面是实体类
public class Person {
private String name;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public Person(String name, int age) {
    super();
    this.name = name;
    this.age = age;
}
public void setAge(int age) {
    this.age = age;
}
private int age;
}

下面是测试类
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ReflectTest {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        Constructor constructor = Person.class.getConstructor(String.class,Integer.class);
        String name="刘阳";   
        Integer weight=new Integer(23);   
        Object initargs []={name,weight};   
        Person p =(Person)constructor.newInstance(initargs);
        System.out.println("姓名:"+p.getName()+"年龄:"+p.getAge());
        
        
        Person pa = new Person("liuyang",12);
        Method methodSetName = Person.class.getMethod("setName", String.class);
        methodSetName.invoke(pa, "刘");
        System.out.println(pa.getName());
      
    }

}

下面是报的错:

Exception in thread "main" java.lang.NoSuchMethodException: Person.<init>(java.lang.String, java.lang.Integer)
    at java.lang.Class.getConstructor0(Class.java:2706)
    at java.lang.Class.getConstructor(Class.java:1657)
    at ReflectTest.main(ReflectTest.java:13)


作者: 刘旭    时间: 2012-4-18 20:47
在构造器public Person(String name, int age)中,age类型是int型,在得到构造器 Constructor constructor = Person.class.getConstructor(String.class,Integer.class);中,你传入的参数时Integer.class,应该改成int.class或者Integer.class,或者改变构造器参数类型。
作者: 申振华    时间: 2012-4-18 21:43
public Person(String name, int age)
Person中的构造方法传入的参数为字符串和整型  所以在反射获取构造方法时,传入的字节码也应该是字符串和整型的。
Constructor constructor = Person.class.getConstructor(String.class,int.class);
作者: 贠(yun)靖    时间: 2012-4-18 21:52
在反射中,基本类型 和 类类型的字节码是不同的   比如int 和Integer 他们两个的字节码是完全不同的
作者: liuyang    时间: 2012-4-18 21:54
谢谢各位,根据你们的提示,我改出来了,细节很重要啊。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2