【发布时间】:2010-09-15 21:25:09
【问题描述】:
我正在使用 Apache Commons CLI 库进行命令行解析。它适用于字符串值选项,但我不确定如何干净地处理布尔值命令行标志。我试过这个:
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" );
但是由于cl.getParsedOptionValue() 返回null 并且不能转换为Boolean,所以这会失败并在文件行上显示NullPointerException。
cl.hasOption( "parseOnly" ) 返回 true 或 false,但从文档中不清楚这意味着什么 - 这是否意味着用户指定了它并且它可能是 true 或 false?或者这是否意味着标志被激活?如果您希望一个标志默认为 true,并让用户将其关闭(如其他 getopt 解析器中的 --noParseOnly)怎么办?
我会很感激人们提出的任何建议,包括 RTFM - 我确信这是一个成熟的领域。谢谢。
【问题讨论】:
-
使用
Boolean.valueOf(cl.getParsedOptionValue("parseOnly"))将字符串转换为布尔值 -
cl.getParsedOptionValue()不返回字符串,它返回一个对象,并且文档说“返回转换为特定类型的此选项的版本。”不幸的是,它没有说明该特定类型是如何确定的。
标签: java apache-commons getopt