Apache Commons CLI - тип опции и значение по умолчанию
Как я могу указать опцию CLI типа - например, int
или Integer
? (Позже, как я могу получить разобранное значение с помощью одного вызова функции?)
Как я могу предоставить опцию CLI значение по умолчанию? Таким образом, что CommandLine.getOptionValue()
или упомянутый выше вызов функции возвращают это значение, если в командной строке не указано?
Ответы
Ответ 1
EDIT: значения по умолчанию теперь поддерживаются. См. Ответ fooobar.com/questions/158738/... ниже.
Как уже упоминал Брент Уорден, значения по умолчанию не поддерживаются.
У меня были проблемы с использованием Option.setType
. При вызове getParsedOptionValue
при опции с типом Integer.class
я всегда получал исключение нулевого указателя. Поскольку документация была не очень полезной, я изучил исходный код.
Глядя на класс TypeHandler и PatternOptionBuilder вы можете видеть, что Number.class
необходимо использовать для int
или Integer
.
И вот простой пример:
CommandLineParser cmdLineParser = new PosixParser();
Options options = new Options();
options.addOption(OptionBuilder.withLongOpt("integer-option")
.withDescription("description")
.withType(Number.class)
.hasArg()
.withArgName("argname")
.create());
try {
CommandLine cmdLine = cmdLineParser.parse(options, args);
int value = 0; // initialize to some meaningful default value
if (cmdLine.hasOption("integer-option")) {
value = ((Number)cmdLine.getParsedOptionValue("integer-option")).intValue();
}
System.out.println(value);
} catch (ParseException e) {
e.printStackTrace();
}
Имейте в виду, что value
может переполняться, если предоставляется число, которое не вписывается в int
.
Ответ 2
Я не знаю, не работает или добавлен недавно, но getOptionValue() имеет перегруженную версию, которая принимает значение по умолчанию (String) значение
Ответ 3
CLI не поддерживает значения по умолчанию. Любая неустановленная опция возвращает getOptionValue
возврат null
.
Вы можете указать типы опций, используя метод Option.setType и извлечь значение параметра синтаксического анализа как этот тип, используя CommandLine.getParsedOptionValue
Ответ 4
Опция OptionBuilder устарела в версиях 1.3 и 1.4 и Option.Builder
, похоже, не имеет прямой функции для установки типа. Существует функция класса Option
, называемая setType
. Вы можете получить преобразованное значение с помощью функции CommandLine.getParsedOptionValue
.
Не уверен, почему он не является частью строителя. Для этого требуется следующий код:
options = new Options();
Option minOpt = Option.builder("min").hasArg().build();
minOpt.setType(Number.class);
options.addOption(minOpt);
и прочитав его:
String testInput = "-min 14";
String[] splitInput = testInput.split("\\s+");
CommandLine cmd = CLparser.parse(options, splitInput);
System.out.println(cmd.getParsedOptionValue("min"));
который даст переменную типа Long