CLIオプションにint
やInteger
などのタイプを指定するにはどうすればよいですか? (後で、単一の関数呼び出しで解析された値を取得するにはどうすればよいですか?)
CLIオプションにデフォルト値を指定するにはどうすればよいですか? CommandLine.getOptionValue()
または上記の関数呼び出しがコマンドラインで指定されていない限り、その値を返すように?
編集:デフォルト値がサポートされるようになりました。以下の回答 https://stackoverflow.com/a/14309108/1082541 を参照してください。
Brent Wordenがすでに述べたように、デフォルト値はサポートされていません。
Option.setType
の使用にも問題がありました。タイプInteger.class
のオプションでgetParsedOptionValue
を呼び出すと、常にnullポインター例外が発生しました。ドキュメントがあまり役に立たなかったので、ソースコードを調べました。
TypeHandler クラスと PatternOptionBuilder クラスを見ると、int
またはInteger
にNumber.class
を使用する必要があることがわかります。
そして、ここに簡単な例があります:
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
がオーバーフローする可能性があることに注意してください。
機能していないか、最近追加されたかどうかはわかりませんが、 getOptionValue()hasデフォルト(文字列)値を受け入れるオーバーロードされたバージョン
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
の変数を与えます
CLIはデフォルト値をサポートしていません。設定されていないオプションがあると、getOptionValue
はnull
を返します。
Option.setType メソッドを使用してオプションタイプを指定し、解析されたオプション値を CommandLine.getParsedOptionValue を使用してそのタイプとして抽出できます。
他の定義を使用することができます
getOptionValue:
public String getOptionValue(String opt, String defaultValue)
デフォルト値を文字列にラップします。
例:
String checkbox = line.getOptionValue("cb", String.valueOf(false));
出力:false
それは私のために働いた