我正在尝试为交互式 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 有委托或函数指针,我只需在字符串(表示操作)和委托(用于程序中操作的实际实现)之间创建一个映射。我想我可以用反射来模拟委托,但它很血腥而且我失去了类型安全性,因为我必须对类和方法使用字符串名称。有没有更好的办法?
谢谢,