我想做一些类似的事情
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