A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liuyang 中级黑马   /  2012-4-18 20:15  /  1717 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面是实体类
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)

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
在构造器public Person(String name, int age)中,age类型是int型,在得到构造器 Constructor constructor = Person.class.getConstructor(String.class,Integer.class);中,你传入的参数时Integer.class,应该改成int.class或者Integer.class,或者改变构造器参数类型。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
public Person(String name, int age)
Person中的构造方法传入的参数为字符串和整型  所以在反射获取构造方法时,传入的字节码也应该是字符串和整型的。
Constructor constructor = Person.class.getConstructor(String.class,int.class);
回复 使用道具 举报
在反射中,基本类型 和 类类型的字节码是不同的   比如int 和Integer 他们两个的字节码是完全不同的
回复 使用道具 举报
谢谢各位,根据你们的提示,我改出来了,细节很重要啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马