Apache Commons CLI - 选项类型和默认值

时间:2011-04-07 18:15:51

标签: java apache-commons apache-commons-cli

如何为CLI选项提供类型 - 例如intInteger? (稍后,如何通过单个函数调用获取解析后的值?)

如何为CLI Option提供默认值?这样CommandLine.getOptionValue()或上面提到的函数调用会返回该值,除非在命令行中指定了一个值?

5 个答案:

答案 0 :(得分:46)

编辑:现在支持默认值。请参阅下面的回答https://stackoverflow.com/a/14309108/1082541

正如Brent Worden已经提到的,不支持默认值。

我在使用Option.setType方面遇到了问题。在类型为getParsedOptionValue的选项上调用Integer.class时,我总是遇到空指针异常。因为文档不是真的有用,所以我查看了源代码。

查看TypeHandler课程和PatternOptionBuilder课程,您可以看到Number.classint必须使用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();
}

请注意,如果提供的某个数字不适合valueint可能会溢出。

答案 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

对我有用