Picocli, как распознать наличие опции с необязательным значением и конвертером пользовательского типа

Пикокли v2.3.0.

@CommandLine.Option(names = {"--number-headings"}, arity = "0..1", paramLabel = "levels", description = {"Adds numbers to headings. Optional parameter to set the heading levels to be numbered.", "eg. 2-4"})
public HeadingNumberingRange numberHeadings;

Пользовательский преобразователь типов зарегистрирован и работает правильно, если указано значение (mycommand --number-headings 2-5). Но numberHeadings остается null, если вызывается как: mycommand --number-headings.

Пример на http://picocli.info/man/2.x/#_Optional_values предполагает, что параметр с типом String получит пустую строку, если значение не указано.

Таким образом, пустая строка является значением по умолчанию, когда параметр присутствует, но значение не указано.

Это позволяет различать 3 ситуации:

  1. Опция отсутствует (получаем null)
  2. Опция присутствует без значения (мы получаем пустую строку)
  3. Опция присутствует со значением (мы получаем значение)

С пользовательским ITypeConverter метод convert() ITypeConverter не вызывается, когда не указано значение. Итак, каково эквивалентное значение по умолчанию, когда опция присутствует, но не указано значение для пользовательских типов?


person Jesse    schedule 05.04.2018    source источник


Ответы (1)


Спасибо, что подняли этот вопрос в системе отслеживания проблем picocli.

Начиная с пикокли 3.0.0-alpha-5 , настраиваемые преобразователи типов могут сопоставлять пустую строку (когда параметр присутствует без значения) с настраиваемым значением по умолчанию. Эта функция включена в общедоступную версию picocli 3.0.0, вышел из.

person Remko Popma    schedule 01.05.2018