Mat*_*all 11 java string reflection functional-programming
目前,我有一堆实现Processor接口的Java类,这意味着它们都有一个processRequest(String key)方法.这个想法是每个类都有一些(比方说,<10)成员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...
}
Run Code Online (Sandbox Code Playgroud)
你明白了.
这对我来说很好,但现在我需要一个从key到function的运行时可访问映射; 并不是每个函数实际上都返回一个String(一些返回void),我需要动态访问每个类中每个函数的返回类型(使用反射).我已经有一个知道所有键的管理器,但不知道从键到功能的映射.
我的第一直觉是if-else用a语句替换这个映射Map<String, Function>,就像我在Javascript中所做的那样.但是,Java不支持一流的功能,所以我在那里运气不好.我可能会挖掘出第三方库,让我可以使用一流的功能,但我还没有见过,我怀疑我需要一个全新的库.
我还想过将这些String键放入一个数组中并使用反射按名称调用方法,但我发现这个方法有两个缺点:
if-else我现在的陈述慢.效率是一个令人担忧的问题,因为这些方法往往会被频繁调用,我希望尽量减少不必要的开销.TL; DR:我正在寻找一种干净的,最小的开销方式来映射String到Function我可以调用和调用(类似)的某种对象getReturnType().我特别介意使用第三方库,如果它真的符合我的需要.我也不介意使用反射,但我强烈希望每次进行方法查找时都避免使用反射 - 可能使用一些结合了Map反射的缓存策略.
关于获得我想要的好方法的想法?干杯!
没有任何一流的独立功能,但您可以通过界面执行所需的操作.创建一个代表您的功能的界面.例如,您可能具有以下内容:
public interface ComputeString
{
public String invoke();
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以首先创建一个Map<String,ComputeString>您想要的对象.使用地图将比反射快得多,并且还将提供更多类型安全性,因此我建议如上所述.
| 归档时间: |
|
| 查看次数: |
15240 次 |
| 最近记录: |