我正在使用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允许我访问被解析的对象,它将使我的生活更加轻松。
答案 0 :(得分:10)
解决方案如下:
String parsedCommand = jCommander.getParsedCommand();
JCommander parsedJCommander = jCommander.getCommands().get(parsedCommand);
Object commandObject = parsedJCommander.getObjects().get(0);
parsedJCommander
对象只有一个命令对象,在我的例子中是我想要执行的Runnable
。