5

コマンド ライン解析用の Apache Commons CLI ライブラリに足を踏み入れています。文字列値のオプションでは問題なく動作しますが、ブール値のコマンド ライン フラグをきれいに処理する方法がわかりません。私はこれを試しました:

    CommandLineParser parser = new GnuParser();
    Options options = new Options();
    options.addOption(new Option("parseOnly", "Only parse"));
    CommandLine cl = parser.parse( options, args );

    if( cl.hasOption( "parseOnly" ) )
    PARSE_ONLY = (Boolean) cl.getParsedOptionValue( "parseOnly" );

しかし、これNullPointerExceptionはファイル行の a で失敗します。なぜなら、cl.getParsedOptionValue()andnullは にキャストできないからBooleanです。

cl.hasOption( "parseOnly" )trueまたはfalseを返しますが、それが何を意味するのかはドキュメントからは明らかではありません-ユーザーが指定したことを意味し、trueまたはfalseのいずれかである可能性がありますか? それともフラグが立っているということですか?フラグをデフォルトの true にして、ユーザーがそれをオフにできるようにしたい場合 (他の getopt パーサーの --noParseOnly のように)?

RTFM を含め、人々からの提案を歓迎します。ありがとう。

4

2 に答える 2

8

ブールオプション(またはフラグ)の場合、オプションが見つかった場合はオプション値がtrueになり、それ以外の場合は値がfalseになります。

したがって、ユーザーがを指定した場合、-parseOnlyそれは真であることを意味します。-parseOnlyが存在しない場合、ユーザーはそれを望まず、falseになります。

だからあなたがする必要があるのは:

 if( cl.hasOption( "parseOnly" ) ){
    //do something
 }

別のポイント:ブール値に文字列をキャストしないでください。代わりに、を使用Boolean.valueOf(cl.getOptionValue("parseOnly"))して文字列をブール値に変換します。

于 2010-09-15T21:43:47.100 に答える
0

ソース ファイルを確認したところ、getParsedOptionValue () は、OptionBuilder.withType() で設定できる Option.getType() に従ってオプション文字列引数を解析します。問題は、限られた種類のセット(Number、Date など) でのみ機能することです。たとえば、Integer でも機能しません。

とは言っても、ブール値には引数なしのフラグ オプションを使用する必要があります。引数付きのオプションではありません。ユーザーは通常、「--parse-only true|false」ではなく、「--parse-only」と入力するか、何も入力しないことを期待しているためです。これがおそらく getParsedOptionValue() が Boolean 型をサポートしていない理由です。

于 2014-10-14T10:55:45.390 に答える