args4j:如果未给出另一个参数 is/isn,如何使参数成为必需参数?
args4j: How to make an argument required if another argument is/isn't given?
@Options(name="--in-file")
String fileName;
@Option(name="--table")
String table;
当且仅当 --in-file
没有给出任何值时,我想让 --table
选项成为必需选项。我该怎么做呢?我知道有一些解决方案(我认为至少)我可以用多个 类 来做到这一点,但是对于一个简单程序中只有两个参数来说这似乎有点过分了。
我知道我也可以在解析完成后手动检查值,但这似乎违背了使用 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` is not given。所以,基本上,我原来的问题。
所以
您可以像您提到的那样使用 forbids
。
@Options(name="--in-file", forbids{"--table"})
String fileName;
@Option(name="--table", forbids={"--in-file"})
String table;
并且您可以在 class 中添加检查条件。
if (fileName == null && table == null) {
throw new CmdLineException();
}
您可以设置与设置 required
选项时显示的消息相同的异常消息。
@Options(name="--in-file")
String fileName;
@Option(name="--table")
String table;
当且仅当 --in-file
没有给出任何值时,我想让 --table
选项成为必需选项。我该怎么做呢?我知道有一些解决方案(我认为至少)我可以用多个 类 来做到这一点,但是对于一个简单程序中只有两个参数来说这似乎有点过分了。
我知道我也可以在解析完成后手动检查值,但这似乎违背了使用 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` is not given。所以,基本上,我原来的问题。
所以
您可以像您提到的那样使用 forbids
。
@Options(name="--in-file", forbids{"--table"})
String fileName;
@Option(name="--table", forbids={"--in-file"})
String table;
并且您可以在 class 中添加检查条件。
if (fileName == null && table == null) {
throw new CmdLineException();
}
您可以设置与设置 required
选项时显示的消息相同的异常消息。