Java булевы параметры CLI - PullRequest
       13

Java булевы параметры CLI

2 голосов
/ 16 сентября 2010

Я промочил ноги с помощью библиотеки 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" );

Но это не удается с NullPointerException в строке файла, потому что cl.getParsedOptionValue() возвращает null, и это не может быть приведено к Boolean.

cl.hasOption( "parseOnly" ) возвращает значение true или false, но из документов неясно, что это означает - означает ли это, что пользователь указал его, и это может быть либо true, либо false?Или это означает, что флаг активирован?Что, если вы хотите, чтобы флаг был значением по умолчанию true и позволил пользователю отключить его (как --noParseOnly в других парсерах getopt)?

Я буду признателен за любые предложения, в том числе и RTFM -уверен, что это проторенная земля.Спасибо.

Ответы [ 2 ]

5 голосов
/ 16 сентября 2010

Для логических параметров (или флагов), если параметр найден, тогда значение параметра - true, в противном случае - false.

Следовательно, если пользователь указывает -parseOnly, это означает, что это правда. Если -parseOnly отсутствует, то пользователь не хочет этого и имеет значение false.

Так что все, что вам нужно сделать, это:

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

Еще один момент: не приводите строку к логическому значению. Вместо этого используйте Boolean.valueOf(cl.getOptionValue("parseOnly")) для преобразования строки в логическое значение.

0 голосов
/ 14 октября 2014

Я проверил исходные файлы и getParsedOptionValue () анализирует строковый аргумент опции в соответствии с Option.getType (), который можно установить с помощью OptionBuilder.withType (). Проблема в том, что работает только с ограниченным набором типов (число, дата и т. Д.) И, например, даже с Integer не работает.

Тем не менее, вы должны использовать параметры флага с нулевым аргументом для логических значений, а не параметры с аргументами, потому что пользователь обычно ожидает напечатать '--parse-only' или вообще ничего, а не '--parse-only true | ложный'. Возможно, это причина того, что getParsedOptionValue () не поддерживает логический тип.

...