假设我使用file.list()来获取src文件夹中的所有文件。假装一个文件名叫做Problem0001.java。是否可以仅使用字符串“Problem0001.java”调用Problem0001.java类的方法?
更深入的解释: 我正在研究项目欧拉的问题。项目欧拉是一堆需要数学和编程知识的问题。我希望每个问题都能解决它自己的课程。我决定如果我可以创建一个菜单来输入问题编号并且答案显示在屏幕上,那将是非常棒的。我开始使用switch语句来调用具有问题解决方案的类。我想最终每次解决一个新问题时我会厌倦添加到switch语句。我希望计算机找到所有解决方案类文件,并将解决方案的编号放在一个列表中(因为我可能会跳过一些问题)。每当我进入菜单屏幕时,列表将被打印出来。我输入了我想看到的解决方案的编号,这就是我丢失的部分。我不知何故需要取这个数字并用相同的数字调用类的静态方法。因此,如果我键入3,则类文件Problem0003.java将激活,或者编译器工作。
答案 0 :(得分:6)
如果您有类名,则必须使用ClassLoader
在运行时加载该类以获取.class
Class<?> clazz = Class.forName("org.someorg.SomeClass");
完成后,您可以使用Reflection
调用静态方法Method method = clazz.getMethod("methodName", String.class);
method.invoke(null,"someString");
注意:假设该方法采用字符串作为参数String.class
答案 1 :(得分:3)
是的,您可以使用java Reflection API。
看一下如何在运行时调用方法的example。