如何使用反射创建具有构造函数中参数的类的实例?

2022-08-31 23:54:49

例如:

public class Test {

    public static void main(String[] args) throws Exception {
        Car c= (Car) Class.forName("Car").newInstance();
        System.out.println(c.getName());
    }
}

class Car {
    String name = "Default Car";
    String getName(){return this.name;}
}

清除代码。

但是,如果我添加带有参数的构造函数,有些是这样的:

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

明白了:java.lang.InstantiationException

所以,不,我不知道,如何用参数传递构造函数。

请帮忙。


答案 1

您需要说出要使用传递参数的构造函数。

Car c = Car.class.getConstructor(String.class).newInstance("Lightning McQueen");

答案 2

如果您正在处理超/子类,或者出于某种原因不知道要实例化的类,则还需要 forName() 方法:

(ClassName) Class.forName([name_of_the_class])
      .getConstructor([Type]).newInstance([Constructor Argument]);

这假设name_of_the_class是传递的变量。另外,如果类在包中,即使该包已被导入,您仍然必须在forName()中明确规定该包(我认为,我是新手)。

Class.forName([name_of_package].[name_of_class])