4

我正在使用JCommander在命令行上与用户交互。

JCommander 设置如下所示:

JCommander jCommander = new JCommander();
jCommander.addCommand(new Command1());
jCommander.addCommand(new Command2());
jCommander.addCommand(new Command3());

Scanner scanner = new Scanner(System.in);
jCommander.usage();
jCommander.parse(splitAsArgs(scanner.nextLine())));

现在我可以使用getParsedCommand()来检索正在解析的命令的名称。

我的问题是,将返回的 String 转换为传递给addCommand. 我可以在外部保存一张地图,进行这种翻译,但这是多余的,因为 jcommander 已经知道所有这些。

我应该如何将已解析命令的名称翻译回命令对象本身?

通常我传递给 jcommander 的所有命令实现Runnable或类似的东西。因此,如果 jcommander 允许我访问已解析的对象,它将使我的生活更轻松。

4

1 回答 1

10

解决方案如下:

String parsedCommand = jCommander.getParsedCommand();
JCommander parsedJCommander = jCommander.getCommands().get(parsedCommand);
Object commandObject = parsedJCommander.getObjects().get(0);

parsedJCommander对象只有一个命令对象,在我的情况下是Runnable我想要执行的。

于 2013-06-10T07:18:29.617 回答