Java args4j:如果另一个参数为/isn';不给?

Java args4j:如果另一个参数为/isn';不给?,java,command-line-arguments,args4j,Java,Command Line Arguments,Args4j,当且仅当文件中的--没有给出值时,我想将--table选项设为必填项。我该怎么做呢?我知道有一些解决方案(我想至少是这样),我可以用多个类来实现这一点,但在一个简单的程序中,对于两个参数来说,这似乎太过分了 我知道我也可以在解析完成后手动检查值,但这似乎违背了使用args4j的目的。我意识到我可以使用注释选项来完成大部分操作。你只需要在一个或另一个标签,但我把它的完整性 使用 可以将注释用于反向逻辑 上述内容不完整的原因: 以上只是部分正确:如果您希望其中一个选项是必需的,而另一个选项没有给出

当且仅当文件中的--没有给出值时,我想将--table选项设为必填项。我该怎么做呢?我知道有一些解决方案(我想至少是这样),我可以用多个类来实现这一点,但在一个简单的程序中,对于两个参数来说,这似乎太过分了

我知道我也可以在解析完成后手动检查值,但这似乎违背了使用args4j的目的。

我意识到我可以使用注释选项来完成大部分操作。你只需要在一个或另一个标签,但我把它的完整性

使用

可以将注释用于反向逻辑


上述内容不完整的原因: 以上只是部分正确:如果您希望其中一个选项是必需的,而另一个选项没有给出,那么解决方案仍然失败。要求的部分推翻了禁止,这样做

@Options(name="--in-file", forbids{"--table"})
String fileName;

@Option(name="--table", forbids={"--in-file"})
String table;
导致一个逻辑错误,如果我在文件中给出
--table
,它会尝试禁止
--table
,但它不能,因为需要
--table

因此,最初的解决方案失败了,因为它允许用户不给出任何选项,即使我希望
--table'是必需的,如果且仅当
--in file`未给出时。所以,基本上,我的原始问题


因此

您可以使用您提到的
禁止

@Options(name="--in-file", forbids{"--table"})
String fileName;

@Option(name="--table", required=true, forbids={"--in-file"})
String table;
您可以在类中添加检查条件

@Options(name="--in-file", forbids{"--table"})
String fileName;

@Option(name="--table", forbids={"--in-file"})
String table;

您可以将异常消息设置为与当
必需时显示的消息相同的
选项集。

这是迄今为止我看到的最干净的想法。我只希望可以只使用args4j语法。我想我们不能总是得到我们想要的。您如何使用未弃用的CmdLineException构造函数以这种方式提供消息?
@Options(name="--in-file", forbids{"--table"})
String fileName;

@Option(name="--table", forbids={"--in-file"})
String table;
if (fileName == null && table == null) {
    throw new CmdLineException();
}