0

想象一下,我在 args4j 中有这两个选项:

@Option(name = "-a")
boolean a;

@Option(name = "-b")
boolean b;

是否有可能通过注释说我想要 a 或 b (并且只有其中一个)

谢谢!

4

1 回答 1

0

不可能只使用注释。但是可以通过注释和一次检查来完成。

您可以使用forbidsin annotations 为您的选项设置 At-Most-One 约束。

@Options(name="-a1", forbids{"-a2", "-a3", /*...*/, "-aN"})
T a1;

@Options(name="-a2", forbids{"-a1", "-a3", /*...*/, "-aN"})
T a2;

/*...*/

@Options(name="-aN", forbids{"-a1", "-a2", /*...*/, "-a(N-1)"})
T aN;

您可以在您的班级中添加一项检查以对您的选项设置至少一个约束。

if (a1 == null && a2 == null && /*...*/ && aN == null) {
    throw new CmdLineException();
}

您可以设置与选项设置时显示的消息相同的异常消息required以保持一致性。

于 2016-05-12T14:40:38.597 回答