通过反射机制实例化对象,wrong number of arguments异常;

239 阅读1分钟
  • 在一次通过反射机制实例化对象的时候,通过一个有参构造器,实例化对象,主函数如下图代码,
public class ReflectionCreateInstance {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException,
            IllegalAccessException, InvocationTargetException, InstantiationException {
        // 1. 获取User 的 Class 对象;
        Class<?> aClass = Class.forName("reflection_.class_.User");
        // 2. 这里是无参构造器;
        Object o = aClass.getConstructor().newInstance();
        User user = (User)o;
        System.out.println(user);
        // 3. 通过有参构造器,创建一个实例对象;
        Object user1 = aClass.getConstructor().newInstance("牛蛙", 121);
        System.out.println(user1);
    }
}
  • 报wrong number of arguments异常,如图所示:

image.png

  • class User 代码如下图所示:
class User{
    private String name;
    private int age;

    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public User(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}

解决办法:

  • 在第三点注释下代码,添加对应参数Class类对象,如下图所示:
Object user1 = aClass.getConstructor(String.class,int.class).newInstance("牛蛙", 121);
System.out.println(user1);
  • 运行结果如图所示: image.png