3

我对 JCommander 有疑问。如果所需的参数 iam testing 没有值,我希望程序抛出异常。当我忘记向最后一个参数添加值时,我想要的这个异常就会发生。

示例(注意:所有参数都是必需的和字符串):

--user hugo --password boss --confirmPassword //no value

com.beust.jcommander.ParameterException:参数后需要一个值--comfirmPassword

如果我忘记为其他参数添加值,则将下一个参数视为该值。

--user --password --confirmPassword hugo
//--password is considered as the value of user

由于这种行为,无法再找到 --password 并且我得到了错误的异常。

com.beust.jcommander.ParameterException:需要以下选项:--password

有没有办法告诉 jCommander 他不应该将下一个参数视为一个值?

4

1 回答 1

2

所以我检查了文档。

如果您确定您的参数不会带有前缀,--您可以单独添加参数验证。

public class IsUserName implements IParameterValidator {
  public void validate(String name, String value)
    throws ParameterException {
      if (value.startsWith("--")) {
        throw new ParameterException("probably missing user name"); 
      }
  }
}

@Parameter(names = "--user", validateWith = IsUserName.class)
private String user;

另一种选择可能是将variableArity标志与参数验证结合使用。尝试根据 0 长度检查参数。

看看参数验证是如何完成的 (String, String) 对,它很可能不支持可变参数。

于 2015-11-26T17:18:20.857 回答