如何为CLI选项提供类型 - 例如int
或Integer
? (稍后,如何通过单个函数调用获取解析后的值?)
如何为CLI Option提供默认值?这样CommandLine.getOptionValue()
或上面提到的函数调用会返回该值,除非在命令行中指定了一个值?
答案 0 :(得分:46)
编辑:现在支持默认值。请参阅下面的回答https://stackoverflow.com/a/14309108/1082541。
正如Brent Worden已经提到的,不支持默认值。
我在使用Option.setType
方面遇到了问题。在类型为getParsedOptionValue
的选项上调用Integer.class
时,我总是遇到空指针异常。因为文档不是真的有用,所以我查看了源代码。
查看TypeHandler课程和PatternOptionBuilder课程,您可以看到Number.class
或int
必须使用Integer
。
这是一个简单的例子:
CommandLineParser cmdLineParser = new PosixParser();
Options options = new Options();
options.addOption(OptionBuilder.withLongOpt("integer-option")
.withDescription("description")
.withType(Number.class)
.hasArg()
.withArgName("argname")
.create());
try {
CommandLine cmdLine = cmdLineParser.parse(options, args);
int value = 0; // initialize to some meaningful default value
if (cmdLine.hasOption("integer-option")) {
value = ((Number)cmdLine.getParsedOptionValue("integer-option")).intValue();
}
System.out.println(value);
} catch (ParseException e) {
e.printStackTrace();
}
请注意,如果提供的某个数字不适合value
,int
可能会溢出。
答案 1 :(得分:27)
我不知道是否无法正常工作或最近添加,但getOptionValue() 是一个接受默认(字符串)值的重载版本
答案 2 :(得分:1)
CLI不支持默认值。任何未设置的选项都会导致getOptionValue
返回null
。
您可以使用Option.setType方法指定选项类型,并使用CommandLine.getParsedOptionValue
将解析后的选项值提取为该类型答案 3 :(得分:1)
在版本1.3和版本1.3中不推荐使用OptionBuilder。 1.4和Option.Builder
似乎没有直接的功能来设置类型。 Option
类有一个名为setType
的函数。您可以使用函数CommandLine.getParsedOptionValue
检索转换后的值。
不知道为什么它不再是建筑师的一部分了。它现在需要一些像这样的代码:
options = new Options();
Option minOpt = Option.builder("min").hasArg().build();
minOpt.setType(Number.class);
options.addOption(minOpt);
并阅读它:
String testInput = "-min 14";
String[] splitInput = testInput.split("\\s+");
CommandLine cmd = CLparser.parse(options, splitInput);
System.out.println(cmd.getParsedOptionValue("min"));
将提供Long
答案 4 :(得分:0)
一个人可以使用
的其他定义getOptionValue:
public String getOptionValue(String opt, String defaultValue)
并将默认值包装为字符串。
示例:
String checkbox = line.getOptionValue("cb", String.valueOf(false));
输出:false
对我有用