Java布尔CLI选项

Ken*_*ams 2 java getopt apache-commons

我正在使用Apache Commons CLI库进行命令行解析.它适用于String值选项,但我不确定如何干净地处理布尔值的命令行标志.我试过这个:

    CommandLineParser parser = new GnuParser();
    Options options = new Options();
    options.addOption(new Option("parseOnly", "Only parse"));
    CommandLine cl = parser.parse( options, args );

    if( cl.hasOption( "parseOnly" ) )
    PARSE_ONLY = (Boolean) cl.getParsedOptionValue( "parseOnly" );
Run Code Online (Sandbox Code Playgroud)

但是这NullPointerException在文件行上失败了,因为cl.getParsedOptionValue()返回null并且无法转换为Boolean.

cl.hasOption( "parseOnly" )返回true或false,但是从文档中不清楚这意味着什么 - 它是否意味着用户指定它并且它可能是true还是false?或者它是否意味着标志被激活?如果你想让一个标志默认为true,并让用户将其关闭(如其他getopt解析器中的--noParseOnly),该怎么办?

我会感谢人们提出的任何建议,包括RTFM - 我确信这是一个很好的基础.谢谢.

dog*_*ane 6

对于布尔选项(或标志),如果找到该选项,则选项值为true,否则值为false.

因此,如果用户指定-parseOnly,那意味着它是真的.如果-parseOnly不存在,那么用户不想要它并且它是假的.

所以你需要做的就是:

 if( cl.hasOption( "parseOnly" ) ){
    //do something
 }
Run Code Online (Sandbox Code Playgroud)

另一点:不要将字符串强制转换为布尔值.相反,用于Boolean.valueOf(cl.getOptionValue("parseOnly"))将String转换为boolean.