我正在使用 JCommander 1.48,我遇到了以下问题:
例如,我有这些参数:
@Parameter(names = "user", description = "the User")
private String user;
@Parameter(names = "password", description = "the password")
private String password
我正在使用以下参数运行我的程序:
--user hugo --password secret
和:
--user hugo david --password secret
它们都相当于相同的解决方案,程序运行完美。但是如果参数的值太多,我希望程序抛出异常。我知道“arity”(参数值的数量)作为@Parameter 注释的配置,但字符串的默认值是 1。似乎在第一个值之后,一切都被忽略了,只要它不是另一个参数。
有什么解决方案或想法吗?
编辑:
基本解决方案(由 assylias 发布)对我不起作用。更准确的例子:
public class MyTestProgram {
private final Params options;
public MyTestProgram(String[] args) {
options = new Params();
new JCommander(options).parse("--user hugo david --password secret".split(" "));
//pass "args" to parse() instead of hardcoded string.
}
public static void main(String[] args) throws Exception {
System.setProperty("org.jboss.logging.provider", "slf4j");
new MyTestProgram(args);
}
}
public class Params {
@Parameter
private List<String> parameters = new ArrayList<>();
@Parameter(names = "--user", description = "the user", required = true)
private String webuser;
@Parameter(names = "--password", description = "the password", required = true)
private String stage;
//getters and setters
}
这是在实际程序代码开始之前发生的一切。
编辑: assylias 更新的答案解决了这个问题。