EDIT: Los valores por defecto son ahora soportados. Ver la respuesta https://stackoverflow.com/a/14309108/1082541 a continuación.
Según Brent Worden ya mencionado, los valores predeterminados no son compatibles.
Tuve problemas con el uso de Option.setType
también. Siempre recibí una excepción de puntero nulo al llamar al getParsedOptionValue
en una opción con el tipo Integer.class
. Debido a que la documentación no fue realmente útil, investigué el código fuente.
En cuanto a la clase y la clase TypeHandlerPatternOptionBuilder se puede ver que Number.class
debe ser utilizado para int
o Integer
.
Y aquí es un ejemplo sencillo:
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();
}
Tenga en cuenta que value
puede desbordarse si se proporciona un número que no encaja en un int
.
Gracias por el ejemplo, esto es lo que necesitaba. Sin embargo, he decidido en contra de CLI: es demasiado trabajo. Tal vez sea solo yo, pero me resulta contraproducente cuando tienes que manejar casos comunes como ese. Con suficiente código de configuración, debería ser capaz de decir 'int foo = getOption (" foo ")' y tenerlo por defecto a 42 si algo sale mal. – aib
Sí, tienes razón.También creo que la biblioteca debería manejar esto. ¿Qué biblioteca de análisis de opciones puede recomendar en su lugar? –
Soy nuevo en el mundo de Java. Este fue el primero que probé, y no conozco a otros. Tal vez deberías publicar esto como una pregunta? – aib