Java 如何从字符串实例化类
2022-09-01 03:37:38
可能的重复:
从 Java 中的变量创建新类
我有一根绳子
String className = "DummyClass"
现在我想创建一个类对象,其中类名是className,类似于
Object className = new className() // I know it's not possible.
我想知道如何做到这一点...
可能的重复:
从 Java 中的变量创建新类
我有一根绳子
String className = "DummyClass"
现在我想创建一个类对象,其中类名是className,类似于
Object className = new className() // I know it's not possible.
我想知道如何做到这一点...
“使用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
请注意,此方法传播 null 构造函数引发的任何异常,包括已检验的异常。使用此方法可有效地绕过编译时异常检查,否则编译器将执行该检查。该方法通过将构造函数引发的任何异常包装在(选中)中来避免此问题。
Constructor.newInstance
InvocationTargetException
您可以使用 .例如reflection
Object o = Class.forName(className).newInstance();
但应包含类的完整路径。className