@Options(name="--in-file")
String fileName;
@Option(name="--table")
String table;
当--table
且仅当没有为--in-file
. 我该怎么做呢?我知道有一些解决方案(至少我认为)我可以使用多个类来做到这一点,但这对于一个简单程序中只有两个参数来说似乎有点过分了。
我知道我也可以在解析完成后手动检查值,但这似乎违背了使用 args4j 的目的。
@Options(name="--in-file")
String fileName;
@Option(name="--table")
String table;
当--table
且仅当没有为--in-file
. 我该怎么做呢?我知道有一些解决方案(至少我认为)我可以使用多个类来做到这一点,但这对于一个简单程序中只有两个参数来说似乎有点过分了。
我知道我也可以在解析完成后手动检查值,但这似乎违背了使用 args4j 的目的。
我意识到我可以使用forbids
注释选项来完成大部分工作。您只需要一个或另一个上的标签,但为了完整起见,我把它放在两个上。
使用forbids
@Options(name="--in-file", forbids{"--table"})
String fileName;
@Option(name="--table", forbids={"--in-file"})
String table;
可以将depends
注释用于反向逻辑。
以上只是部分正确:如果您希望在未给出另一个选项时需要其中一个选项,则解决方案仍然失败。必需的部分推翻了禁止,所以这样做
@Options(name="--in-file", forbids{"--table"})
String fileName;
@Option(name="--table", required=true, forbids={"--in-file"})
String table;
导致逻辑错误,如果我给--in-file
它尝试禁止--table
但它不能因为--table
是必需的。
因此,原始解决方案失败了,因为它不允许用户给出任何选项,即使我想要--table' to be required, if and only if
--in-file` 没有给出。所以,基本上,我原来的问题。
所以
你可以使用forbids
你提到的。
@Options(name="--in-file", forbids{"--table"})
String fileName;
@Option(name="--table", forbids={"--in-file"})
String table;
您可以在课堂上添加检查条件。
if (fileName == null && table == null) {
throw new CmdLineException();
}
required
您可以设置与选项设置时显示的消息相同的异常消息。