Java 如何从另一个类运行方法,但该类是字符串
所以我的项目中有很多课程。其中一个叫做Java 如何从另一个类运行方法,但该类是字符串,java,minecraft,bukkit,Java,Minecraft,Bukkit,所以我的项目中有很多课程。其中一个叫做CommandManger,command,create。CommandManger正在访问command.java中的一个void方法(run)。我在create.java中还有一个名为run的方法。我正在尝试在command中的run方法中使用create中的run方法 public void run(CommandSender sender, String[] args) throws ClassNotFoundException, IllegalAc
CommandManger
,command,create。CommandManger
正在访问command.java中的一个void方法(run)。我在create.java中还有一个名为run的方法。我正在尝试在command中的run方法中使用create中的run方法
public void run(CommandSender sender, String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
String className = args[0];
Object c = Class.forName(className).newInstance();
ArrayList<String> a = new ArrayList<String>(Arrays.asList(args));
a.remove(0);
c.run(sender, a.toArray(new String[a.size()]));
}
我在这里遇到的问题是无法识别run方法。但是,每个类都将从该方法调用它。您使用反射来创建对象,所以您应该使用反射来调用它方法:
Class<?> cl = Class.forName(className);
Object c = cl.newInstance();
String[] params = a.toArray(new String[a.size()]);
Method method = cl.getDeclaredMethod("run", CommandSender.class, params.getClass());
method.invoke(c, new Object[] {sender, params});
Class cl=Class.forName(className);
对象c=cl.newInstance();
String[]params=a.toArray(新字符串[a.size()]);
方法Method=cl.getDeclaredMethod(“run”,CommandSender.class,params.getClass());
调用(c,新对象[]{sender,params});
或者,您可以对所有类使用一个接口,然后将对象c转换为该接口。只要它们都在扩展一个公共类或接口(例如,
Runnable
),您就可以转换并调用该类型的方法。不确定要创建的是命令的扩展,并且命令不会扩展任何内容。CommandManager扩展CommandExecutor。然后确保它确实扩展了它。@JustinLevy不要忘记向上投票,并将接受状态赋予帮助您的答案!
Class<?> cl = Class.forName(className);
Object c = cl.newInstance();
String[] params = a.toArray(new String[a.size()]);
Method method = cl.getDeclaredMethod("run", CommandSender.class, params.getClass());
method.invoke(c, new Object[] {sender, params});