如何在Java中将字符串映射到函数?
目前,我有一堆实现接口的Java类,这意味着它们都有一个方法。这个想法是每个类都有一些(例如,<10)成员,并且每个成员都通过该方法映射到该类中的方法,如下所示:Processor
processRequest(String key)
Strings
processRequest
class FooProcessor implements Processor
{
String key1 = "abc";
String key2 = "def";
String key3 = "ghi";
// and so on...
String processRequest(String key)
{
String toReturn = null;
if (key1.equals(key)) toReturn = method1();
else if (key2.equals(key)) toReturn = method2();
else if (key3.equals(key)) toReturn = method3();
// and so on...
return toReturn;
}
String method1() { // do stuff }
String method2() { // do other stuff }
String method3() { // do other other stuff }
// and so on...
}
你明白了。
这对我来说很好,但现在我需要一个从键到功能的运行时可访问的映射;并非每个函数实际上都返回一个 String(有些返回 void),我需要动态访问每个类中每个函数的返回类型(使用反射)。我已经有一个经理知道所有键,但不知道从键到功能的映射。
我的第一个直觉是用语句替换这个映射,就像我在Javascript中所做的那样。但是,Java不支持一流的函数,所以我在那里运气不好。我可能会挖出一个第三方库,让我使用一流的函数,但我还没有看到任何函数,我怀疑我是否需要一个全新的库。if-else
Map<String, Function>
我还想过将这些键放入数组中,并使用反射按名称调用方法,但是我看到此方法有两个缺点:String
- 我的密钥必须与方法命名相同 - 或者以特定,一致的方式命名,以便于将它们映射到方法名称。
- 这似乎比我现在的陈述要慢得多。效率是一个问题,因为这些方法往往会被频繁调用,我想尽量减少不必要的开销。
if-else
TL;大卫:我正在寻找一种干净,开销最小的方法来将a映射到某种对象,我可以调用和调用(类似的东西)。我不介意使用第三方库,如果它真的适合我的需求。我也不介意使用反射,尽管我强烈希望避免每次执行方法查找时使用反射 - 也许使用一些将反射与反射相结合的缓存策略。String
Function
getReturnType()
Map
关于获得我想要的东西的好方法的想法?干杯!