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

Spa*_*ker 4 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())));
Run Code Online (Sandbox Code Playgroud)

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

我的问题是,将返回的String转换为传递给的实际对象似乎非常困难addCommand.我可以在外部保存一张地图,这样做可以进行这种翻译,但这是多余的,因为jcommander已经知道这一切.

我该如何从解析命令的名称转换回命令对象本身?

通常我传给jcommander的所有命令都是Runnable类似的.因此,如果jcommander允许我访问被解析的对象,它将使我的生活更轻松.

Spa*_*ker 10

解决方案如下:

String parsedCommand = jCommander.getParsedCommand();
JCommander parsedJCommander = jCommander.getCommands().get(parsedCommand);
Object commandObject = parsedJCommander.getObjects().get(0);
Run Code Online (Sandbox Code Playgroud)

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