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

use*_*011 41 java reflection class

例如:

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;}
}
Run Code Online (Sandbox Code Playgroud)

明确的代码.

但是,如果我用params添加构造函数,有些像这样:

public Car(String name)
{this.name = name;}
Run Code Online (Sandbox Code Playgroud)

我知道了: java.lang.InstantiationException

所以,不,我不知道,如何通过params传递构造函数.

请帮忙.

Pet*_*rey 86

您需要说明要使用哪个构造函数传递参数.

Car c = Car.class.getConstructor(String.class).newInstance("Lightning McQueen");
Run Code Online (Sandbox Code Playgroud)

  • 对于本机类型,请使用(例如)Integer.TYPE而不是Integer.class (2认同)
  • @mcoolive 或 int.class (2认同)

C D*_*son 7

如果您正在处理超级/子类,或者由于某种原因不确切知道要实例化哪个类,那么还需要forName()方法:

(ClassName) Class.forName([name_of_the_class])
      .getConstructor([Type]).newInstance([Constructor Argument]);
Run Code Online (Sandbox Code Playgroud)

这假设name_of_the_class是传递的变量.此外,如果类在一个包中,即使已导入该包,您仍然必须在forName()中明确规定包(我想,我对这一切都是新手).

Class.forName([name_of_package].[name_of_class])
Run Code Online (Sandbox Code Playgroud)