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我想执行的.