我有一个字符串
String className = "DummyClass"
现在我要创建一个类对象,其中类名是 className ,这就像
Object className = new className() // I know it's not possible.
我想知道怎么做......
答案 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()"?详细说明了这一切是如何运作的。