4

假设我使用 file.list() 来获取 src 文件夹中的所有文件。假装一个文件名为Problem0001.java。是否可以仅使用字符串“Problem0001.java”来调用 Problem0001.java 类的方法?

更深入的解释:我正在研究 Euler 项目中的问题。欧拉计划是一堆需要数学和编程知识的问题。我希望每个问题都解决它自己的类。我决定如果我可以创建一个菜单,我可以在其中输入问题编号并且答案会显示在屏幕上,那就太棒了。我从一个 switch 语句开始,它会调用有问题解决方案的类。我想最终我会厌倦每次解决一个新问题时添加 switch 语句。我希望计算机找到所有解决方案类文件并将解决方案的编号放在一个列表中(因为我可能会跳过一些问题)。每当我进入菜单屏幕时,列表就会被打印出来。我输入我想查看的解决方案的编号,这就是我迷路的部分。我不知何故需要拿那个号码并用相同的号码调用类的静态方法。因此,如果我输入 3,类文件 Problem0003.java 将激活,或者编译器可以正常工作。

4

2 回答 2

8

当你有一个类名时,你将不得不在运行时加载该类ClassLoader来获取.class

Class<?> clazz = Class.forName("org.someorg.SomeClass");

一旦你有了它,你就可以使用反射调用静态方法

Method method = clazz.getMethod("methodName", String.class);
method.invoke(null,"someString");

注意:假设该方法将字符串作为参数是String.class

于 2013-03-12T06:43:12.320 回答
3

是的,你可以,使用 java Reflection API

看一个如何在运行时调用方法的例子。

于 2013-03-12T06:28:25.430 回答