gpt4 book ai didi

Java - 如何使用类名和方法名作为字符串从另一个类调用方法

转载 作者:行者123 更新时间:2023-12-01 18:04:26 26 4
gpt4 key购买 nike

此方法会定期调用

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 的不同包中。

当尝试创建类变量时,我似乎总是遇到此错误,我认为这是主要问题。

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.InitationTargetException; 导入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);

谢谢大家

最佳答案

您需要使用反射。尝试如下操作。如果您的类位于不同的包中,请使用完全限定的类名而不是 "XYZ"

import java.lang.reflect.*;
import java.lang.*;

public class ReflectionTest {
public static void main(String[] args)throws NoSuchMethodException,
ClassNotFoundException,
IllegalAccessException,
InvocationTargetException {
(Class.forName("XYZ")).getDeclaredMethod("ABC", null).invoke(null,null);
}
}

class XYZ
{
public static void ABC()
{
System.out.println("Lulz");
}
}

对于您的用例,考虑到您的类位于 commands 包中(如您在评论中所述)。完全限定名称将为 commands.classname

(Class.forName("commands."+N[1])).getDeclaredMethod("s", null).invoke(null,null);

关于Java - 如何使用类名和方法名作为字符串从另一个类调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37850637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com