Java 如何从字符串实例化类

2022-09-01 03:37:38

可能的重复:
从 Java 中的变量创建新类

我有一根绳子

String className = "DummyClass"

现在我想创建一个类对象,其中类名是className,类似于

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

我想知道如何做到这一点...


答案 1

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

如果我想实例化我用 的类检索到的类,我必须首先向它请求一个表示我想要的构造函数的对象,然后要求它创建一个新对象。中的方法将检索 ;然后,我可以通过调用其方法使用它:forName()java.lang.reflect.ConstructorConstructorgetConstructor(Class[] parameterTypes)ClassConstructorConstructornewInstance(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.newInstanceInvocationTargetException


答案 2

您可以使用 .例如reflection

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

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


推荐