42

CLI オプションに や などのタイプを指定するにはどうすればよいですintInteger? (後で、単一の関数呼び出しで解析された値を取得するにはどうすればよいですか?)

CLI オプションにデフォルト値を与えるにはどうすればよいですか? CommandLine.getOptionValue()コマンドラインで指定されていない限り、上記の関数呼び出しはその値を返しますか?

4

5 に答える 5

49

編集:デフォルト値がサポートされるようになりました。以下の回答https://stackoverflow.com/a/14309108/1082541を参照してください。

Brent Wordenがすでに述べたように、デフォルト値はサポートされていません。

私も使用に問題がありましOption.setTypeた。getParsedOptionValueタイプがのオプションを呼び出すと、常にnullポインタ例外が発生しましたInteger.class。ドキュメントがあまり役に立たなかったので、私はソースコードを調べました。

TypeHandlerクラスとPatternOptionBuilderクラスを見ると、またはに使用する必要があることがわかります。Number.classintInteger

そして、ここに簡単な例があります:

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

于 2011-05-10T20:13:44.790 に答える
30

動作していないのか、最近追加されたのかはわかりませんが、getOptionValue() には、デフォルト(String)値を受け入れるオーバーロードされたバージョンがあります

于 2013-01-13T22:46:07.473 に答える
1

CLI はデフォルト値をサポートしていません。オプションを設定しないと、 がgetOptionValue返されnullます。

Option.setTypeメソッドを使用してオプション タイプを指定し、CommandLine.getParsedOptionValueを使用して解析されたオプション値をそのタイプとして抽出できます。

于 2011-04-07T20:12:08.217 に答える