17

私は何かをしたい

public static final Option job1 =
    OptionBuilder.hasArg(false)
        .isRequired(false)
        .withDescription("description of job1")
        .create(JOB1);

前述のように、Apache Commons cli を使用して複数のオプションを指定する方法は?

私はmaven依存関係を次のように使用しています

<dependency>
    <groupId>commons-cli</groupId>
    <artifactId>commons-cli</artifactId>
    <version>1.1</version>
</dependency>

ここで述べたように - http://mvnrepository.com/artifact/commons-cli/commons-cli/1.1

しかし、私はできません、コンパイラは不平を言います

static member org.apache.commons.cli.OptionsBuilder.create() accessed via instance reference

、私も試してみまし<version>1.2</version>たが、うまくいきませんでした。何か不足していますか?

4

1 に答える 1

29

問題は、のすべてのメソッドOptionBuilderが静的であり、静的フィールドを操作し、単一の静的インスタンスを返すことです。OptionBuilderしたがって、メソッドを実行するためにのインスタンスは必要ありません。これは、あなたが行ったように、呼び出しをつなぎ合わせたいという自然な欲求とうまく調和しません。

コンパイラを落ち着かせる(おそらくIDEで警告を無効にする)か、コードを次のように調整する(テストされていない)以外の解決策はありません。

public static final Option job1;

static {
    OptionBuilder.hasArg(false);
    OptionBuilder.isRequired(false)
    OptionBuilder.withDescription("description of job1")
    job1 = OptionBuilder.create(JOB1);
}

OptionBuilderクラスがパブリックの引数なしのコンストラクターとインスタンスメソッドのみで書き直され、他のすべてのビルダーと同じように動作する場合は、より良いでしょう。commons-cli Issue Trackerに既存のバグがあり、これを強調しています:https ://issues.apache.org/jira/browse/CLI-224

更新:私のパッチはトランクに送信されたので、新しい「適切な」ビルダーがcommons-cli(v1.3)の次のリリースで利用可能になります。ここでJavadocを参照してください。

于 2012-09-17T21:10:00.097 に答える