17

我想做类似的事情

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>,但没有运气,我错过了什么吗?

4

1 回答 1

29

问题是其中的每个方法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

于 2012-09-17T21:10:00.097 回答