使用 Java 反射创建新实例 - java.lang.InstantiationException

问题描述

Person 是带有构造函数的抽象类:

    /**
     * default Person constructor with no attribute
     */
    public Person() {}
    public Person(String firstName,String lastName,String ssn,Address address) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.ssn = ssn;
        this.address = address;
    }

地址构造函数

public Address() {
    }
    public Address(int streetNum,String streetName,String city,String zip,String state) {
        this.streetNum = streetNum;
        this.streetName = streetName;
        this.city = city;
        this.zip = zip;
        this.state = state;
    }

这是我迄今为止在 ReflectionTest 类中尝试过的,但出现以下错误。不知道为什么会导致该错误以及如何修复它?

java.lang.InstantiationException
    at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at ReflectionTest.main(ReflectionTest.java:55)
try {
            Constructor<Person> personConstructor = Person.class.getConstructor(String.class,String.class,Address.class);
            Constructor<Address> addressConstructor = Address.class.getConstructor(int.class,String.class);

            Address a2 = addressConstructor.newInstance(11,"Main Street","SJ","99990","CA");
            Person p2 = personConstructor.newInstance("Victor","Nguyen","001",a2);

            Address a3 = addressConstructor.newInstance(11,"CA");
            Person p3 = personConstructor.newInstance("Tina","Vang","002",a3);

            Address a4 = addressConstructor.newInstance(12,"99991","CA");
            Person p4 = personConstructor.newInstance("Max","003",a4);

            p2.setFirstName("N");
            p2.setLastName("L");
            p2.setAge(22);

            System.out.println("Person 1: " + p2.toString());
            System.out.println("Person 2: " + p3.toString());
            System.out.println("Person 3: " + p4.toString());

      } catch (illegalaccessexception | NoSuchMethodException | InvocationTargetException | InstantiationException e) {
            e.printstacktrace();
      }

提前致谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)