繁体   English   中英

Java Apache CLI OptionBuilder不能用作Builder模式

[英]Java Apache CLI OptionBuilder not working as Builder pattern

我想做点什么

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

如上所述如何使用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

但我无法,编译器抱怨

static member org.apache.commons.cli.OptionsBuilder.create() accessed via instance reference

,我甚至试过<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

更新:我的补丁已经提交到trunk,因此下一版commons-cli(v1.3)中将提供一个新的“正确”构建器。 在这里查看Javadocs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM