EDIT: теперь поддерживаются значения по умолчанию. См. Ответ https://stackoverflow.com/a/14309108/1082541 ниже.
Как уже упоминал Брент Уорден, значения по умолчанию не поддерживаются.
У меня тоже были проблемы с использованием 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
.