Java 我可以将函数名存储在最终hashmap中以供执行吗?

Java 我可以将函数名存储在最终hashmap中以供执行吗?,java,dynamic,Java,Dynamic,我正在构建一个像Flex4.5中的终端仿真器一样工作的管理控制器。 服务器端是使用Java编程语言的tomcat服务器上的Red5 当用户在textinput中输入命令时,命令将发送到red5,在red5中,我检查命令是否存在,如果命令或参数不匹配,则返回正确的输出或错误 所以现在我使用if(command.equals(“..”){}else if(command.equals(…) 是否有方法存储每个命令中应该执行的函数名或函数引用并执行它 例如: // creating the hasma

我正在构建一个像Flex4.5中的终端仿真器一样工作的管理控制器。 服务器端是使用Java编程语言的tomcat服务器上的Red5

当用户在textinput中输入命令时,命令将发送到red5,在red5中,我检查命令是否存在,如果命令或参数不匹配,则返回正确的输出或错误

所以现在我使用
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);
}