Apache Commons CLI-オプションの種類とデフォルト値

apache-commons apache-commons-cli java
Apache Commons CLI-オプションの種類とデフォルト値

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

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

  34  4


ベストアンサー

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

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

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

TypeHandlerクラスとhttp://svn.apache.org/viewvc/commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/PatternOptionBuilder.java?view=markup[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();
}

「int」に収まらない数値が指定された場合、「value」はオーバーフローする可能性があることに注意してください。

45


動作していないか、最近追加されたかどうかはわかりませんが、http://commons.apache.org/proper/commons-cli/apidocs/org/apache/commons/cli/CommandLine.html#getOptionValue%28java.lang.String、 %20java.lang.String%29 [getOptionValue()] * has *デフォルト(文字列)値を受け入れるオーバーロードバージョン

25


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

1


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`型の変数を与えます

1


タイトルとURLをコピーしました