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 - 我确信这是一个很好的基础.谢谢.
对于布尔选项(或标志),如果找到该选项,则选项值为true,否则值为false.
因此,如果用户指定-parseOnly,那意味着它是真的.如果-parseOnly不存在,那么用户不想要它并且它是假的.
所以你需要做的就是:
if( cl.hasOption( "parseOnly" ) ){
//do something
}
Run Code Online (Sandbox Code Playgroud)
另一点:不要将字符串强制转换为布尔值.相反,用于Boolean.valueOf(cl.getOptionValue("parseOnly"))将String转换为boolean.