Java 我可以将函数名存储在最终hashmap中以供执行吗?
我正在构建一个像Flex4.5中的终端仿真器一样工作的管理控制器。 服务器端是使用Java编程语言的tomcat服务器上的Red5 当用户在textinput中输入命令时,命令将发送到red5,在red5中,我检查命令是否存在,如果命令或参数不匹配,则返回正确的输出或错误 所以现在我使用Java 我可以将函数名存储在最终hashmap中以供执行吗?,java,dynamic,Java,Dynamic,我正在构建一个像Flex4.5中的终端仿真器一样工作的管理控制器。 服务器端是使用Java编程语言的tomcat服务器上的Red5 当用户在textinput中输入命令时,命令将发送到red5,在red5中,我检查命令是否存在,如果命令或参数不匹配,则返回正确的输出或错误 所以现在我使用if(command.equals(“..”){}else if(command.equals(…) 是否有方法存储每个命令中应该执行的函数名或函数引用并执行它 例如: // creating the hasma
if(command.equals(“..”){}else if(command.equals(…)
是否有方法存储每个命令中应该执行的函数名或函数引用并执行它
例如:
// creating the hasmap
HashMap<String,Object> myfunc = new HashMap<String,Object>();
// adding function reference
myfunc.put("help",executeHelp);
然后
void receiveCommand(String command, Object params[]( {
myfunc.get(command).<somehow execute the referrened function or string name ? >
}
void receiveCommand(字符串命令,对象参数[]({
myfunc.get(命令)。
}
有什么想法吗
谢谢!您可以按以下名称执行函数:
java.lang.reflect.Method method;
try {
method = obj.getClass().getMethod(methodName, param1.class, param2.class, ..);
} catch (SecurityException e) {
// ...
} catch (NoSuchMethodException e) {
// ...
}
在上面的代码段中,param1.class、param2.class
是要执行的方法的参数的类类型
然后:
这里有更多的信息:您可以为您的函数定义一个接口
interface Function {
public Object invoke(Object[] arguments);
}
然后通过此接口公开您的代码
public class Function1 implements Function {
public Object invoke(Object[] arguments) {
...
}
}
并储存在地图上
map.put("helpCommand", new Function1());
或者使用匿名类存储引用
Function theFunction = new Function() {
public Object invoke(Object[] arguments) {
return theRealMethod(arguments[0], String.valueOf(arguments[1]));
}
}
在第二个示例中,我演示了如果要调用的方法的签名与接口的签名不同,如何使用匿名类作为适配器。您可以使用反射,但我建议使用一种更简单的方法 您可以使用抽象方法execute创建抽象类或接口。示例:
interface Command {
void execute(Object params[]);
}
class Help implements Command {
void execute(Object params[]) {
// do the stuff
}
}
现在,您的hashmap可以是:
// creating the hasmap
HashMap<String,Command> myfunc = new HashMap<String,Command>();
// adding function reference
myfunc.put("help", new Help());
是的,这样更安全,更有条理。
interface Command {
void execute(Object params[]);
}
class Help implements Command {
void execute(Object params[]) {
// do the stuff
}
}
// creating the hasmap
HashMap<String,Command> myfunc = new HashMap<String,Command>();
// adding function reference
myfunc.put("help", new Help());
void receiveCommand(String command, Object params[]) {
myfunc.get(command).execute(params);
}