Comment puis-je donner à une option CLI un type - tel que int
ou Integer
? (Plus tard, comment puis-je obtenir la valeur analysée avec un seul appel de fonction?)
Comment puis-je donner à une option CLI une valeur par défaut? Tels que CommandLine.getOptionValue()
ou l'appel de fonction mentionné ci-dessus renvoient cette valeur sauf si une est spécifiée sur la ligne de commande
EDIT: les valeurs par défaut sont désormais prises en charge. Voir la réponse https://stackoverflow.com/a/14309108/1082541 ci-dessous.
Comme Brent Worden l'a déjà mentionné, les valeurs par défaut ne sont pas prises en charge.
J'ai eu des problèmes avec l'utilisation de Option.setType
aussi. J'ai toujours eu une exception de pointeur nul lors de l'appel de getParsedOptionValue
sur une option de type Integer.class
. Parce que la documentation n'était pas vraiment utile, j'ai regardé le code source.
En regardant la classe TypeHandler et la classe PatternOptionBuilder , vous pouvez voir que Number.class
doit être utilisé pour int
ou Integer
.
Et voici un exemple simple:
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();
}
Gardez à l'esprit que value
peut déborder si un nombre est fourni qui ne rentre pas dans un int
.
Je ne sais pas si cela ne fonctionne pas ou s'il a été ajouté récemment mais getOptionValue () has une version surchargée qui accepte une valeur par défaut (chaîne)
L'OptionBuilder est déconseillé dans les versions 1.3 & 1.4 et Option.Builder
ne semble pas avoir de fonction directe pour définir le type. Il existe une fonction pour la classe Option
appelée setType
. Vous pouvez récupérer une valeur convertie avec la fonction CommandLine.getParsedOptionValue
. Je ne sais pas pourquoi il ne fait plus partie du constructeur. Il nécessite maintenant du code comme celui-ci:
options = new Options();
Option minOpt = Option.builder("min").hasArg().build();
minOpt.setType(Number.class);
options.addOption(minOpt);
et en le lisant:
String testInput = "-min 14";
String[] splitInput = testInput.split("\\s+");
CommandLine cmd = CLparser.parse(options, splitInput);
System.out.println(cmd.getParsedOptionValue("min"));
ce qui donnerait une variable de type Long
CLI ne prend pas en charge les valeurs par défaut. Toute option non définie se traduit par getOptionValue
renvoyant null
.
Vous pouvez spécifier des types d'options à l'aide de la méthode Option.setType et extraire la valeur d'option analysée comme ce type à l'aide de CommandLine.getParsedOptionValue
On peut utiliser une autre définition de
getOptionValue:
public String getOptionValue(String opt, String defaultValue)
et enveloppez votre valeur par défaut dans une chaîne.
Exemple:
String checkbox = line.getOptionValue("cb", String.valueOf(false));
sortie: faux
ça a marché pour moi