2011-02-04 7 views
5

私はコマンドラインの解析にApache commons cli(1.2)を使用しています。OptionBuilderをコンパイルする際のスカラーエラー

私は自分のコードに次のようにあります

import org.apache.commons.cli.OptionBuilder 
OptionBuilder.withLongOpt("db-host").hasArg. 
withDescription("Name of the database host").create('h') 

私はエラーhasArg is not a member of org.apache.commons.cli.OptionBuilderを取得します。 .hasArg.hasArg()に変更しても差はありません。

なぜですか?

ところで、Javaはこの罰金を解析します。

+0

: –

+0

@pst(リマインダーが。javacの/エクリプス/どこで警告をオンにします):私はそれらを持っています。私はNetbeans(最高のScalaサポート、IMHO)で働いていて、 'hasArg'メソッドに下線を引いています。私はIntelliJで作業する方が好きですが、Scalaプラグインにはコードを再フォーマットする際に深刻なバグがあります。私はバグレポートを提出していますが、これまでの修正は掲載されていません。 – Ralph

答えて

12
import org.apache.commons.cli.OptionBuilder 
OptionBuilder.withLongOpt("db-host").hasArg. 
withDescription("Name of the database host").create('h') 

私はエラーhasArg is not a member of org.apache.commons.cli.OptionBuilderを取得します。 .hasArg.hasArg()に変更しても差はありません。

なぜですか?

のでOptionBuilderにはインスタンスメソッドhasArg、静的な方法は存在しません。 hasArgは静的メソッドなので、クラスのインスタンスではなく、クラスで呼び出す必要があります。

ところで、Javaはこの罰金を解析します。

これは解析と何が関係しているのか分かりません。 Scalaはこれをうまく解析します。さらに、このコードではまったく異なるプログラミングがしているかどうかはまったく関係がありません。なぜなら、これはScalaコードであり、他の言語ではないからです。

あなたはこのような何かをする必要があります。

import org.apache.commons.cli.OptionBuilder 

OptionBuilder.withLongOpt("db-host") 
OptionBuilder.hasArg 
OptionBuilder.withDescription("Name of the database host") 

val optionParser = OptionBuilder.create('h') 
+6

Ergh、このOptionBuilderには恐ろしいインターフェイスがあります! – pedrofurla

+4

@pedrofurla:Javaでは、Javaでは誤って動作します。インスタンスでは静的メソッドを呼び出すことができ、対応するインスタンスメソッドがない場合、エラーをスローするのではなく、静的メソッド呼び出しに自動的に変換されます。君は。したがって、Javaでは、実際にはそうではないにもかかわらず、メソッド連鎖を使用したFluent Interfaceのように見えます。これを行う適切な方法は、おそらく、中間状態オブジェクトを使用してメソッド呼び出しをキャプチャすること、多分何らかの種類の状態ステートマシンを使用することです。 –

+1

上記の私のコメントの重要な言葉はもちろん "偶然"です。 @pstが上でヒントしているように、これはほとんどすべてのJava IDEやエディタで厳重な警告を生成し、ほとんどのスタイルチェッカー(CheckStyle、PMD、...)はそれを拒否します。 –

関連する問題