目前,我有一堆實現Processor
接口的Java類,這意味着它們都有一個processRequest(String key)
方法。我們的想法是,每個班有幾個(比如,< 10)成員Strings
,而且每個映射到該類中的方法通過processRequest
方法,像這樣:如何將字符串映射到Java中的函數?
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...
}
你的想法。
這對我來說工作得很好,但現在我需要一個從鍵到功能的運行時可訪問映射;不是每個函數實際上返回一個字符串(一些返回void),我需要動態訪問每個類中每個函數的返回類型(使用反射),有一個鍵。我已經有一位知道所有密鑰的管理員,但是不是從鍵到功能的映射。
我的第一個直覺是用if-else
聲明替換這個映射,Map<String, Function>
,就像我在Javascript中可以做的那樣。但是,Java不支持一流的功能,所以我在那裏運氣不好。我可能會挖掘一個第三方庫,它可以讓我使用一流的功能,但是我還沒有看到,我懷疑我需要一個全新的庫。
我也想過把這些String
鍵到一個數組中,並使用反射來調用的名字方法,但我看到兩個缺點這種方法:
- 我的鑰匙就必須命名一樣該方法 - 或以特定的一致方式命名,以便將它們映射到方法名稱很容易。
- 這似乎比我現在所說的
if-else
陳述慢。效率是一個值得關注的問題,因爲這些方法往往會被頻繁調用,並且我想盡量減少不必要的開銷。
TL; DR:我正在尋找一種乾淨的架空最低限度的方式來將String
映射到某種Function
對象上,我可以調用它(類似於)getReturnType()
。我不特別介意使用第三方庫,如果它真的符合我的需求。我也不介意使用反射,儘管我強烈希望避免每次使用反射時進行方法查找 - 也許使用一些將Map
與反射相結合的緩存策略。
想得到我想要的東西嗎?乾杯!
難道你不能做字符串方法(http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html)嗎?然後你可以緩存你需要執行的方法。 – 2010-04-30 15:53:21
@Chris - 是的,那基本上就是我在問題結束時的標題。 – 2010-04-30 16:18:05
完成它:) :) :) – 2011-03-25 05:43:22