CLI オプションに や などのタイプを指定するにはどうすればよいですint
かInteger
? (後で、単一の関数呼び出しで解析された値を取得するにはどうすればよいですか?)
CLI オプションにデフォルト値を与えるにはどうすればよいですか? CommandLine.getOptionValue()
コマンドラインで指定されていない限り、上記の関数呼び出しはその値を返しますか?
CLI オプションに や などのタイプを指定するにはどうすればよいですint
かInteger
? (後で、単一の関数呼び出しで解析された値を取得するにはどうすればよいですか?)
CLI オプションにデフォルト値を与えるにはどうすればよいですか? CommandLine.getOptionValue()
コマンドラインで指定されていない限り、上記の関数呼び出しはその値を返しますか?
編集:デフォルト値がサポートされるようになりました。以下の回答https://stackoverflow.com/a/14309108/1082541を参照してください。
Brent Wordenがすでに述べたように、デフォルト値はサポートされていません。
私も使用に問題がありましOption.setType
た。getParsedOptionValue
タイプがのオプションを呼び出すと、常にnullポインタ例外が発生しました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
。
動作していないのか、最近追加されたのかはわかりませんが、getOptionValue() には、デフォルト(String)値を受け入れるオーバーロードされたバージョンがあります
CLI はデフォルト値をサポートしていません。オプションを設定しないと、 がgetOptionValue
返されnull
ます。
Option.setTypeメソッドを使用してオプション タイプを指定し、CommandLine.getParsedOptionValueを使用して解析されたオプション値をそのタイプとして抽出できます。