我想在 Java 中实现某种命令模式。我想要一个像 Map<String commandkey, Function()>
这样的结构.所以我有一个对象( Map
、 HashMap
、 LinkedHashMap
或任何关联...),其中键是字符串命令,值是我想通过键调用的函数。从某种意义上说,这些函数必须是异构的,它们可以具有不同的返回值、参数数量、名称(不同的签名)。在 C++ 中,例如我可以通过 boost::function 创建函数指针或仿函数的映射。
那么有人能说出在 Java 中实现这种习语(或者从广义上看是一种模式)的所有方法吗?我知道两种方法:
- 反射(减号:缓慢且非常丑陋)
- 使用接口(interface)和匿名类(缺点:函数必须具有相同的签名)
详细的解释、文章链接等会很有帮助。
最佳答案
- java中没有函数指针,只有接口(interface)
- imo 反射并不像许多人认为的那样缓慢和丑陋
- 你仍然需要知道如何调用函数(你也需要知道在 C++ 中)
所以拥有相同的签名并没有那么糟糕,只需要一个非常灵活的签名就像
无效命令(对象... args)
编辑: 关于反射性能: 看看这个线程答案:Java Reflection Performance
你可以看到仅仅调用一个反射对象并没有那么慢,它是花费大量时间的名字查找,我认为你的情况你不需要每个函数不止一次
关于java - Java实现异构函数映射的方式有哪些?它们的优缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15159652/