【发布时间】:2016-06-16 05:36:23
【问题描述】:
这个方法被定期调用
public static void stynax(String N[]) {
if (N[1].equals("echo")) { echo.s(); main(); }
if (N[1].equals("detectos")) { detectos.s(); main(); }
if (N[1].equals("getuser")) { getuser.s(); main(); }
if (N[1].equals("exit")) { exit.s(); main(); }
if (N[1].equals("makefile")) { makefile.s(); main(); }
if (N[1].equals("cd")) { cd.s(); main(); }
if (N[1].equals("system")) { system.s(); main(); }
main();
}
如何调用所有这些方法
system.s();
echo.s();
等,通过查看类是否存在,然后调用相应的方法。 N[1] 始终是类名。存储此方法的类位于名为 main 的类中,而被调用的类位于名为 Commands 的不同包中。
我似乎总是遇到这个错误,当我尝试创建一个 Class 变量时,我认为这是主要问题。
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
所以它永远不会调用该方法。
为了简化。
1) 程序将类名作为字符串获取为 N[1]
2) 查看类是否存在
3) 如果类存在,则通过类的名称调用它 N[1].s();
编辑:使用的进口 导入 java.io.ByteArrayOutputStream; 导入 java.io.FileWriter; 导入 java.io.IOException; 导入 java.io.PrintStream; 导入 java.io.PrintWriter; 导入 java.lang.reflect.InvocationTargetException; 导入java.lang.reflect.Method; 导入 java.util.Arrays;
import cgameing.Commands.FileBrowser;
import cgameing.Commands.banner;
import cgameing.Commands.cd;
import cgameing.Commands.detectos;
import cgameing.Commands.echo;
import cgameing.Commands.exit;
import cgameing.Commands.getuser;
import cgameing.Commands.makefile;
import cgameing.Commands.system;
编辑结束:
这对任何想做同样事情的人都有效
(Class.forName("commands."+N[1])).getDeclaredMethod("s", null).invoke(null,null);
谢谢大家
【问题讨论】:
-
您的帖子不清楚,请修改您的帖子,使其更清晰。
-
只是为了澄清......你真的需要动态查找类吗?如果没有,将命令名称映射到 lambda 函数会容易得多。
-
lambda 函数可以工作
-
你能展示你的进口吗?