我試圖做交互式Java程序非常簡單的命令行庫。您啓動Java程序並提示您輸入命令。語法是:地圖代表在Java中
> action [object_1, [object_2, [... object_n] ... ]]
例如:
> addUser name "John Doe" age 42
這裏action = "addUser", object_1 = "name", object_2 = "John Doe", object_3 = "age", object_4 = "42"
。
爲對象(即,操作使用對象)。你可以看到動作和對象是簡單的字符串。對象字符串也可以根據需要轉換爲數字。
我的計劃是,此命令行庫的用戶將簡單地創建方法(屬於任何合適的Java對象),並且每個方法分配給一個特定的動作。命令行中的對象成爲用戶分配方法的參數。實現用於該示例的上述方法的合適的類將是:
class Foo {
public void addUserHandler(
String param1, String param2, String param3, Integer param4) {
do.someThing();
}
}
當用戶鍵入的命令時,由程序員分配的相應的功能獲取與在命令行中指定的參數調用。我知道Java沒有函數指針(如C)或委託(如C#),實現回調的方式是通過一個接口,但是,我不明白我在這種情況下如何使用接口。我看到接口的問題是,他們有:要實現
- 的功能的固定數量
- 要實現的功能有一個固定的聲明。
與(1)的問題是,我的圖書館的用戶可能決定實施任意數量的功能,儘可能多的行動,因爲他想支持。與(2)的問題是,用戶可能希望與描述性名稱分配的功能,像addUserHandler()爲「ADDUSER」行動。
要是Java委託或函數指針,我只想創建的字符串(代表動作)和代表之間的映射(在程序實際執行的動作)。我想我可以模仿與反思的代表,卻是血淋淋的,我失去的類型安全,我不得不使用字符串名稱的類和方法。有沒有更好的方法?
謝謝,
我失敗看看C#委託或C函數指針(或任何其他靜態類型語言中的其他方法)如何以安全的方式幫助解決固定聲明的問題。你不能有一個包含'Action'和'Action '的C#'Dictionary,同時仍然是類型安全的。 –
gustafc