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

时间:2021-05-13 21:38:47

标签: java-reflection

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, String.class, Address.class);
            Constructor<Address> addressConstructor = Address.class.getConstructor(int.class, String.class, String.class, String.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, "Main Street", "SJ", "99990", "CA");
            Person p3 = personConstructor.newInstance("Tina", "Vang", "002", a3);

            Address a4 = addressConstructor.newInstance(12, "Main Street", "SJ", "99991", "CA");
            Person p4 = personConstructor.newInstance("Max", "Vang", "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();
      }

提前致谢!

0 个答案:

没有答案
相关问题