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

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). Но число заголовков остается null если называется как: mycommand --number-headings,

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

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

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

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

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

1 ответ

Спасибо за то, что подняли это на трекере проблем пикокли.

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

Другие вопросы по тегам