Java 使用Apache Commons CLI的互斥选项

Java 使用Apache Commons CLI的互斥选项,java,apache-commons,apache-commons-cli,Java,Apache Commons,Apache Commons Cli,我可以使用以下方法创建两个互斥选项: 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

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

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?

    的方法来解决这个问题,我实现了以下功能,这并不理想,但是

    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(...);
       }
    }
    

    是的,我不认为commons cli中的功能走得那么远,但另一方面,它会为少数情况添加许多非常复杂的代码,这些情况可以像您一样在库之外轻松处理。