Java如何从string实例化一个类

时间:2011-09-21 07:03:11

标签: java java-ee

  

可能重复:
  Create new class from a Variable in Java

我有一个字符串

String className = "DummyClass"

现在我要创建一个类对象,其中类名是 className ,这就像

Object className = new className() // I know it's not possible.

我想知道怎么做......

3 个答案:

答案 0 :(得分:54)

"Using java.lang.reflect"会回答您的所有问题。首先使用Class获取Class.forName()对象,然后:

  

如果我要实例化一个用forName()检索的类,我必须首先要求它代表我想要的构造函数的java.lang.reflect.Constructor对象,然后要求Constructor制作一个新对象。 getConstructor(Class[] parameterTypes)中的方法Class将检索Constructor;然后我可以通过调用方法Constructor来使用newInstance(Object[] parameters)

Class myClass = Class.forName("MyClass");

Class[] types = {Double.TYPE, this.getClass()};
Constructor constructor = myClass.getConstructor(types);

Object[] parameters = {new Double(0), this};
Object instanceOfMyClass = constructor.newInstance(parameters);

newInstance()上有一个Class方法似乎可以做你想要的。 不要使用。它会将已检查的异常静默转换为未经检查的异常。

  

请注意,此方法传播由nullary构造函数抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时异常检查,否则将由编译器执行。 Constructor.newInstance方法通过将构造函数抛出的任何异常包装在(已检查的)InvocationTargetException中来避免此问题。

答案 1 :(得分:7)

您可以使用reflection。例如,

Object o = Class.forName(className).newInstance(); 

但是className应该包含该类的完整路径。

答案 2 :(得分:0)

检查此问题的答案:What is the difference between "Class.forName()" and "Class.forName().newInstance()"?详细说明了这一切是如何运作的。