How can I give a CLI Option a type - such as int
or Integer
? (Later, how can I get the parsed value with a single function call?)
How can I give a CLI Option a default value? Such that CommandLine.getOptionValue()
or the function call mentioned above return that value unless one is specified on the command line?
EDIT: Default values are now supported. See answer https://stackoverflow.com/a/14309108/1082541 below.
As Brent Worden already mentioned, default values are not supported.
I had issues with using Option.setType
too. I always got a null pointer exception when calling getParsedOptionValue
on an option with type Integer.class
. Because the documentation was not really helpful I looked into the source code.
Looking at the TypeHandler class and the PatternOptionBuilder class you can see that Number.class
must be used for int
or Integer
.
And here is a simple example:
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();
}
Keep in mind that value
can overflow if a number is provided which does not fit into an int
.