在python中,如果我有一些要基于输入调用的函数,则可以执行以下操作:
lookup = {'function1':function1, 'function2':function2, 'function3':function3} lookup[input]()
那就是我有一个映射到函数的函数名字典,并通过字典查找来调用函数。
如何在Java中执行此操作?
有几种方法可以解决此问题。其中大多数已发布:
我个人将使用Command方法。命令与模板方法很好地结合在一起,使您可以在所有命令对象上强制执行某些模式。例:
public abstract class Command { public final Object execute(Map<String, Object> args) { // do permission checking here or transaction management Object retval = doExecute(args); // do logging, cleanup, caching, etc here return retval; } // subclasses override this to do the real work protected abstract Object doExecute(Map<String, Object> args); }
仅当您需要对那些您无法控制其设计,并且对于它们执行命令并不实际的类使用这种映射时,我才求助于反射。例如,您无法通过为每种方法创建命令来在命令外壳中公开Java API。