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

时间:2011-06-05 07:19:31

标签: java class reflection

例如:

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;}
}

清晰的代码。

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

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

我明白了:java.lang.InstantiationException

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

请帮助。

2 个答案:

答案 0 :(得分:81)

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

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

答案 1 :(得分:7)

如果您正在处理超级/子类,或者由于某种原因不确切知道要实例化哪个类,则还需要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])