java - Java实现异构函数映射的方式有哪些?它们的优缺点?

标签 java methods dictionary functor

我想在 Java 中实现某种命令模式。我想要一个像 Map<String commandkey, Function()> 这样的结构.所以我有一个对象( MapHashMapLinkedHashMap 或任何关联...),其中键是字符串命令,值是我想通过键调用的函数。从某种意义上说,这些函数必须是异构的,它们可以具有不同的返回值、参数数量、名称(不同的签名)。在 C++ 中,例如我可以通过 boost::function 创建函数指针或仿函数的映射。 那么有人能说出在 Java 中实现这种习语(或者从广义上看是一种模式)的所有方法吗?我知道两种方法:

  1. 反射(减号:缓慢且非常丑陋)
  2. 使用接口(interface)和匿名类(缺点:函数必须具有相同的签名)

详细的解释、文章链接等会很有帮助。

最佳答案

  1. java中没有函数指针,只有接口(interface)
  2. imo 反射并不像许多人认为的那样缓慢和丑陋
  3. 你仍然需要知道如何调用函数(你也需要知道在 C++ 中) 所以拥有相同的签名并没有那么糟糕,只需要一个非常灵活的签名就像 无效命令(对象... args)

编辑: 关于反射性能: 看看这个线程答案:Java Reflection Performance

你可以看到仅仅调用一个反射对象并没有那么慢,它是花费大量时间的名字查找,我认为你的情况你不需要每个函数不止一次

关于java - Java实现异构函数映射的方式有哪些?它们的优缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15159652/

相关文章:

java - 如何按对象值整数对自定义arraylist进行排序

java - Log4j 不支持二进制日志记录格式?

java - 返回类型泛型

java - 如何使 Javafx 标签可选择

ios - 每次显示 View 时运行方法 - iOS

java - 使用 Object<?> 参数创建函数

java - ID检查char方法?

C++ 在 std::map<> 中使用 std::set<>

dictionary - ansible with_dict 在提供 set_fact 变量时失败

python - 为什么在运行此脚本时获取无效的文字?