0

我正在尝试编写一个控制台程序,它会询问用户类的名称。它将采用这个类名,加载它 - 然后创建它的一个实例,以便我可以调用方法等。

我该怎么做呢?

到目前为止,我已经使用 Scanner 来获取输入。但是现在我将类名作为字符串。我不太确定如何加载它然后创建它的实例。

任何帮助,将不胜感激。

4

3 回答 3

3
Class myClass = Class.forName(userInputString);
Object o = myClass.newInstance();

当然,你会投到o你想要的班级。有关更多详细信息,请参见

于 2013-10-15T02:48:50.343 回答
3

这个问题取决于该类是否存在于应用程序的当前类路径上下文中。

如果是这样,那么这是使用类似...的简单案例

String nameOfClass = ...;
Class classOfName = Class.forName(nameOfClass);
Object instance = classOfName.newInstance();

(注意:这些会引发一系列异常,您需要捕获这些异常)。

仔细查看以java.lang.Class获取更多详细信息

如果当前类加载器上下文中不存在该类,那么您将需要创建自己的类加载器并将类加载到并使用类加载器来加载和创建类的实例

仔细查看java.lang.ClassLoaderjava.net.URLClassLoader了解更多详细信息...

于 2013-10-15T02:50:37.303 回答
0

您可以使用Class.forName()

Class someClass = Class.forName(your_class_name)  //must be with package.
Object o = someClass.newInstance();

你可以在这里阅读更多关于它的信息

于 2013-10-15T02:53:03.437 回答