在Java中实现异构函数映射的方法有哪些?它们的优缺点是什么?

Ole*_*rov 1 java methods map functor

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

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

详细说明,文章链接等将非常有帮助.

x4r*_*f41 5

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

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

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