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 ситуации:
- Варианта нету (получаем
null
) - Опция присутствует без значения (мы получаем пустую строку)
- Опция присутствует со значением (мы получаем значение)
С кастомом ITypeConverter
, convert()
метод ITypeConverter
не вызывается, если значение не указано. Итак, каково эквивалентное значение по умолчанию, когда опция присутствует, но для пользовательских типов значение не указано?
1 ответ
Спасибо за то, что подняли это на трекере проблем пикокли.
Начиная с picocli 3.0.0-alpha-5, преобразователи пользовательских типов могут сопоставлять пустую строку (если параметр присутствует без значения) с пользовательским значением по умолчанию. Эта функциональность включена в только что вышедшую версию Picocli 3.0.0 GA.