使用给定类名作为String创建类的对象

时间:2014-09-27 05:30:45

标签: java class reflection

如果我将该类名保存在字符串中,我想知道如何创建某个类的新对象。

例如。我想创建一个FooClass的对象就像是:

String className = "FooClass";
className.toClass() newObject = new (className.toClass())(); 

我已经做了很多搜索,但一直无法找到答案。

由于

1 个答案:

答案 0 :(得分:2)

Oracle Documentation中所述,您可以通过以下方式执行此操作:

Class<?> clazz = Class.forName(className);
Constructor<?> ctor = clazz.getConstructor(String.class);
Object object = ctor.newInstance(new Object[] { ctorArgument });

让我提供一个非常简单的例子:

假设我们有Main类,我们需要实例化的类在同一个包中 。然后我们可以采取以下行动:

我们需要实施的课程:

public class MyClass {
    public int myInt;
    public MyClass(Integer myInt){
        this.myInt = myInt;
    }
}

main方法:

public static void main(String[] args) throws Exception {
    //Class name must contain full-package path
    // e.g. "full.pack.age.classname"
    String className = Main.class.getPackage().getName() + ".MyClass"; 
    Class<?> clazz = Class.forName(className); 

    //Class.getConstructor(Class<?> ... parameters) gives you a suitable constructor
    //depends on the argument types you're going to pass to them.                                                                  
    Constructor<?> ctor = clazz.getConstructor(Integer.class); 

    //Object creation and constructor call
    Object object = ctor.newInstance(new Object[] { 1 }); //1 is just myInt value passes to a contructor being invoked.
    System.out.println(((MyClass) object).myInt); //Prints 1
}