2011-06-05 25 views
36

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

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

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

请帮忙。

回答

72

你需要说你想使用哪个构造函数来传递它的参数。

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

对于本机类型,请使用(例如)Integer.TYPE而不是Integer.class – mcoolive 2017-12-15 17:25:56

+0

@mcoolive或int.class – 2017-12-16 03:28:12

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]) 
相关问题