Java Apache CLI OptionBuilder不作为生成器模式工作

Java Apache CLI OptionBuilder不作为生成器模式工作,java,apache,command-line-interface,Java,Apache,Command Line Interface,我想做一些像 公共静态最终选项作业1= OptionBuilder.hasArg(false) .isRequired(假) .带说明(“工作说明1”) .创建(JOB1); 如上所述 我使用maven依赖项作为 commons cli 但我不能,编译器抱怨道 静态成员org.apache.commons.cli.OptionsBuilder.create(),通过实例引用访问 ,我甚至尝试了1.2,但运气不好,我是否遗漏了什么?问题是OptionBuilder中的每个方法都是静态的,在静

我想做一些像

公共静态最终选项作业1=
OptionBuilder.hasArg(false)
.isRequired(假)
.带说明(“工作说明1”)
.创建(JOB1);
如上所述

我使用maven依赖项作为


commons cli

但我不能,编译器抱怨道

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


,我甚至尝试了
1.2
,但运气不好,我是否遗漏了什么?

问题是
OptionBuilder
中的每个方法都是静态的,在静态字段上操作并返回单个静态实例。因此,执行这些方法不需要
OptionBuilder
的实例。这与您所做的将呼叫链接在一起的自然愿望不匹配

除了使编译器平静下来(可能禁用IDE中的警告?)或按如下方式调整代码(未经测试),没有其他解决方案:

如果使用公共的无参数构造函数和实例方法重写
OptionBuilder
类会更好,这样就可以像其他构建器一样运行。commons cli问题跟踪器中存在一个突出显示以下内容的错误:


更新:我的补丁已经提交到trunk,因此新的“适当”构建器将在下一版本的commons cli(v1.3)中提供。请参阅Javadocs。

您需要的限制是
@SuppressWarnings(“静态访问”)
,然后您可以使用例如:
选项optionHelp=OptionBuilder.withLongOpt(“帮助”)。withDescription(“打印程序用法”)。创建(“h”)尽管这是一个设计缺陷,但每个方法都是静态的——正如@Duncan Jones所提到的。
public static final Option job1;

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