12

以下を使用して、相互に排他的な 2 つのオプションを作成できます。

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 のいずれかを提供することを強制します。

しかし、3 番目のオプションがある場合は、c:

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

次のような相互に排他的なオプションを作成することは可能ですか?

また:

  1. オプション a を指定する必要があります OR
  2. オプション b と c の両方を指定する必要があります

OptionGroup を使用してそれを行う方法がわかりませんでしたか?

4

1 に答える 1

7

これの回避策として、理想的ではありませんが、次のことを実装しました。

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(...);
   }
}
于 2015-01-08T08:34:59.630 に答える