如何使用 args4j 验证选项?

How can I validate options with args4j?

使用以下代码,

@Option(name = "age") // min = "1"
private int age;

如何验证 age 字段?说必须大于零?

您可以在 void methodName(T value) 形式的方法上放置 Option 注释。 所以您可以通过以下方式轻松完成。

private int age;

@Option(name = "age")
void setAge(int age) {
    if (age < 1) {
        throw new CmdLineException("message");
    }
    this.age = age;
}

我自己用 bean-validation 解决了问题。

一旦我像这样注释了那些 @Option

class Opts {

    @Option(name = "-buffer-capacity",
            usage = "each buffer's capacity in bytes")
    @Min(1024)
    private int bufferCapacity = 65536;

    @Option(name = "-buffer-count", required = true,
            usage = "number of buffers to allocate")
    @Min(1)
    @Max(1024)
    private int bufferCount;
}

我可以使用 bean-validation 来验证它。

final Opts opts;
final ValidatorFactory factory
    = Validation.buildDefaultValidatorFactory();
final Validator validator = factory.getValidator();
final Set<ConstraintViolation<Opts>> violations
    = validator.validate(opts);