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);
}