1

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

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

详细的解释、文章的链接等将非常有帮助。

4

1 回答 1

5
  1. java中没有函数指针,只有接口
  2. imo反射并不像很多人想象的那么缓慢和丑陋
  3. 您仍然需要知道如何调用该函数(您也需要在 c++ 中知道这一点)所以拥有相同的签名并不是那么糟糕,只需采用非常灵活的签名,例如 void command(Object... args)

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

您可以看到仅调用反射对象并没有那么慢,而是按名称查找会花费大量时间,而且我认为您的情况是每个函数都不需要多次

于 2013-03-01T14:13:22.880 回答