当前位置: 首页 > 面试题库 >

相当于Python中函数映射的Java

倪阳飇
2023-03-14
问题内容

在python中,如果我有一些要基于输入调用的函数,则可以执行以下操作:

lookup = {'function1':function1, 'function2':function2, 'function3':function3}
lookup[input]()

那就是我有一个映射到函数的函数名字典,并通过字典查找来调用函数。

如何在Java中执行此操作?


问题答案:

有几种方法可以解决此问题。其中大多数已发布:

  • 命令 -在地图中保留一堆具有execute()或invoke()方法的对象;通过名称查找命令,然后调用方法。
  • 多态性 -比命令更一般的说,您可以在任何相关对象集上调用方法。
  • 最后是反射-您可以使用反射获取对java.lang.Method对象的引用。对于一组已知的类/方法,此方法效果很好,并且在加载Method对象后不会有太多开销。例如,您可以使用它来允许用户在命令行中键入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。



 类似资料:
  • 问题内容: 我正在将PHP代码迁移到Google App Engine-Java。 因此,我需要使用Java中的PHP的crypt函数, 因为我已经 使用crypt 将注册用户的所有密码存储在数据库中。 编辑1 :这是我的php密码加密代码: $ password =“ test123”; $ pwd = crypt($ password,$ password); 回声$ pwd; 输出为(在 W

  • 问题内容: 我正在自学python 2.7。我在使用具有GOTO语句的BATCH方面有一些经验。我该如何在python中做到这一点?例如,假设我想从第5行跳到第18行。 我意识到以前有关于此主题的问题,但是我发现它们没有足够的信息,或者对于我目前的理解而言,在python中的水平太高了。 问题答案: s在计算机科学和编程中普遍受到指责,因为它们会导致非常非结构化的代码。 Python(像当今几乎所

  • 我尝试运行以下代码。 为什么地图功能会打印

  • 问题内容: 我正在尝试将查询从MySQL移植到SQL SERVER2012。 如何为MySQL的substring_index()编写等效项? MySQL SUBSTRING_INDEX()从给定字符串中返回指定次数的分隔符之前的子字符串。 SUBSTRING_INDEX(str,delim,count) 输出: 问题答案: 尝试基于T-SQL和XQuery()的以下解决方案: T-SQL标量函数

  • 问题内容: 我知道(其中e是一个异常)会打印发生的异常,但是,我试图找到与Java等效的python,它可以将异常确切地跟踪到发生的那一行,并打印出整个轨迹。 谁能告诉我Python 的等效功能吗? 问题答案: 在块内执行此操作时,它将自动使用当前异常。有关更多信息,请参见http://docs.python.org/library/traceback.html。

  • 问题内容: 我想要一个模仿python .format()函数的javascript函数,其功能类似于 前面的问题为’.format(* args)提供了一种可能的(但不完整的)解决方案 相当于printf / string.format的JavaScript 我想能够做 我意识到这是一个艰巨的任务,但是也许在某个地方有一个完整的(或至少是部分的)解决方案,其中也包含关键字参数。 哦,我听说AJA