如何用jcommander执行解析的命令?

时间:2013-06-07 12:21:56

标签: java command-line-interface jcommander

我正在使用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允许我访问被解析的对象,它将使我的生活更加轻松。

1 个答案:

答案 0 :(得分:10)

解决方案如下:

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

parsedJCommander对象只有一个命令对象,在我的例子中是我想要执行的Runnable