我正在尝试编写一个控制台程序,它会询问用户类的名称。它将采用这个类名,加载它 - 然后创建它的实例,以便我可以调用方法等等。
我将如何做到这一点?
到目前为止,我已经使用扫描仪来获取输入。但现在我将类名作为字符串。我不太确定如何加载它然后创建它的实例。
任何帮助都将不胜感激。
答案 0 :(得分:3)
Class myClass = Class.forName(userInputString);
Object o = myClass.newInstance();
当然,您会将o
投射到您想要的课程中。有关详细信息,请参阅Class。
答案 1 :(得分:3)
这个问题取决于该类是否存在于应用程序的当前类路径上下文中。
如果确实如此,那么使用类似......的简单案例就是
String nameOfClass = ...;
Class classOfName = Class.forName(nameOfClass);
Object instance = classOfName.newInstance();
(nb:这些引发了一系列你期望捕获的异常)。
仔细查看java.lang.Class
了解更多详情
如果当前类加载器上下文中不存在该类,那么您将需要创建自己的类加载器并将类加载到并使用类加载器来加载和创建类的实例
详细了解java.lang.ClassLoader
和java.net.URLClassLoader
了解更多详情......
答案 2 :(得分:0)
您可以使用Class.forName()
Class someClass = Class.forName(your_class_name) //must be with package.
Object o = someClass.newInstance();
您可以阅读更多相关信息here