使用Apache Commons CLI实现互斥选项

13

我可以使用以下方法创建两个互斥的选项:

Option a = OptionBuilder.create("a");
Option b = OptionBuilder.create("b");

OptionGroup optgrp = new OptionGroup();
optgrp .setRequired(true);
optgrp .addOption(a);
optgrp .addOption(b);

以上代码将强制用户提供选项a或选项b。

但如果我有第三个选项,c:

Option c = OptionBuilder.create("c");

有没有可能创建互斥选项,要求如下:

必须提供选项a,或者同时提供选项b和选项c

我不知道OptionGroup怎么做到这一点?

1个回答

8
作为解决此问题的一种方法,我实施了以下措施,虽然不理想,但是...
public static void validate(final CommandLine cmdLine) {
   final boolean aSupplied = cmdLine.hasOption(A);

   final boolean bAndCSupplied = cmdLine.hasOption(B) && cmdLine.hasOption(C);

   final boolean bOrCSupplied = !bAndCSupplied && (cmdLine.hasOption(B) || cmdLine.hasOption(C));

   if ((aSupplied && bAndCSupplied) || (!aSupplied && !bAndCSupplied)
      || (aSupplied && bOrCSupplied )) {
          throw new Exception(...);
   }
}

2
是的,我认为commons-cli中的功能并没有那么深入,但另一方面,为了处理一些可以在库外轻松处理的情况,它会添加很多非常复杂的代码。 - centic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接