Java boolean CLI 选项

标签 java apache-commons getopt

我正在尝试使用 Apache Commons CLI 库进行命令行解析。它适用于字符串值选项,但我不确定如何干净地处理 boolean 值命令行标志。我试过这个:

    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" );

但这会失败并在文件行上出现 NullPointerException,因为 cl.getParsedOptionValue() 返回 null 并且无法转换为 boolean 值

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

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

最佳答案

对于 boolean 选项(或标志),如果找到选项则选项值为真,否则值为假。

因此,如果用户指定-parseOnly,那么这意味着它是正确的。如果 -parseOnly 不存在,那么用户不需要它并且它是 false。

所以你需要做的就是:

 if( cl.hasOption( "parseOnly" ) ){
    //do something
 }

另一点:不要将字符串转换为 boolean 值。相反,使用 Boolean.valueOf(cl.getOptionValue("parseOnly")) 将字符串转换为 boolean 值。

关于Java boolean CLI 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721936/

相关文章:

Python getopt 未设置正确的值

bash - 在 bash 中的自定义 getopts 脚本中将参数作为选项传递

c - 函数 getopt() 的变量 optarg

java - 检查 int 是否在两个数字之间

Java排序方法支持方法链吗?

java - 使用反射设置对象属性

java - Android 中的 FTP 下载速度极慢(仅在 Java 中速度很快)

java - 如何在java中下载文件?

java - 自动更新 Maven 依赖项

java - 根据java中的字母将按字母顺序排序的列表拆分为子列表