转载

Java Apache CLI OptionBuilder不能用作Builder模式

我想做一些类似的事情

public static final Option job1 =
    OptionBuilder.hasArg(false)
        .isRequired(false)
        .withDescription("description of job1")
        .create(JOB1);

如 How to specify multiple options using apache commons cli? 所述

我正在使用maven依赖关系

<dependency>
    <groupId>commons-cli</groupId>
    <artifactId>commons-cli</artifactId>
    <version>1.1</version>
</dependency>

如这里所述 – http://mvnrepository.com/artifact/commons-cli/commons-cli/1.1

但是我无法编译抱怨

静态成员org.apache.commons.cli.OptionsBuilder.create()通过实例引用访问

我甚至尝试使用<version> 1.2</ version>,但没有运气,我错过了什么?

问题是OptionBuilder中的每个方法都是静态的,在静态字段上运行,并返回一个静态实例.因此,您不需要OptionBuilder的实例来执行方法.这并不能像你所做的一样,将呼叫连接起来的自然欲望结合得很好.

除了将编译器调低(可能会在IDE中禁用警告)之外,还没有解决方法,或者调整代码如下(未测试):

public static final Option job1;

static {
    OptionBuilder.hasArg(false);
    OptionBuilder.isRequired(false)
    OptionBuilder.withDescription("description of job1")
    job1 = OptionBuilder.create(JOB1);
}

如果OptionBuilder类被一个公共的无参构造函数重写,而且只有实例方法,那就更好了,所以其他构造器就像这样.在commons-cli问题跟踪器中存在一个现有的错误,突出显示: https://issues.apache.org/jira/browse/CLI-224

更新:我的修补程序已经提交到中继线,所以在下一个版本的commons-cli(v1.3)中将有一个新的“正确”构建器可用.见Javadocs here .

代码日志版权声明:

翻译自:http://stackoverflow.com/questions/12466955/java-apache-cli-optionbuilder-not-working-as-builder-pattern

原文  https://codeday.me/bug/20181016/286850.html
正文到此结束
Loading...