1

我正在使用 JCommander 来解析命令行参数。我使用以下方法验证参数:

public class SomeClass implements IParameterValidator {
    public void validate(String name, String value) throws ParameterException { 
    ...
}

我遇到了一些极端情况,如果上面的代码块可以知道为应用程序提供的其他命令行参数是什么,而不仅仅是那个,这将是有帮助的。JCommander 有可能吗?

我可以使用 JCommander Commands 实现我的目标,但这不像所需的解决方案那样灵活。

4

2 回答 2

2

文档清楚地说,没有特定的注释可以对提供的参数进行全局验证。 http://jcommander.org/#global_validation

建议在参数解析后进行验证。

于 2016-06-23T16:27:01.230 回答
1

我通过将要测试的变量设为静态来实现这一点。例如:

@Parameter(names = {"big"}, description = "This must be greater than small", validateValueWith = GreaterThanSmall.class)
private Long big = 10000L;

@Parameter(names = {"small"}, description = "Small")
private static Long small = 10L;

public static class GreaterThanSmall implements IValueValidator<Long> {
    @Override
    public void validate(String name, Long value) throws ParameterException {
        if (value < small) {
            throw new ParameterException("Parameter " + name + " should be greater than small (found " + value +")");
        }
    }
}
于 2015-08-21T14:56:23.590 回答