2013-01-14 20 views
5

@RequestMappingのドキュメントを読む:http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/bind/annotation/RequestMapping.html@RequestMappingアノテーションがjavaではStringパラメータを受け入れますが、scalaでは受け付けないのはなぜですか?

パスマッピングの文字列配列パラメータを受け入れます。

だからこれは、Javaを使用して動作します:

@RequestMapping("MYVIEW") 

が、Scalaで私が使用する必要があります。注釈は文字列の配列を期待して

@RequestMapping(Array("MYVIEW")) 

Scalaのバージョンは、理にかなっています。しかし、なぜ上記のjavaで動作する、それはコンパイルエラーを与える必要はありません?クラス「ArrayChecker」(私はこの点を例証するために書いたクラス)以下

Javaは時間誤差をコンパイルさせる:式ArrayCheckerで

方法acceptArrayParam(文字列[]は)に適用 ありません引数(文字列)

public class ArrayChecker { 

    public static void main(String args[]){ 

     String[] strArray; 

     acceptArrayParam("test"); 
    } 

    private static void acceptArrayParam(String[] param){ 

    } 
} 

が同様のエラーが( "MYVIEWを")@RequestMappingによって引き起こされることはないでしょうか?

答えて

6

セクション9.7.1

要素型は、配列型であり、対応するElementValueは、その唯一の要素ElementValueで表される値であり、配列値ElementValueArrayInitializer、ない場合要素に関連付けられています。それ以外の場合、対応するElementValueがElementValueArrayInitializerである場合、ElementValueArrayInitializerによって表される配列値は要素に関連付けられます。述べ上に明確にコメント付き

:すなわち

を単一要素の配列は、配列値注釈型に関連することがある場合には、中括弧を省略することが許容されます素子。

Scalaには同等の配列初期化構文がないため、Array(elems)を使用する必要があります。

0

これは、デフォルトのvalue要素を使用するアノテーションの言語仕様の一部です。

たとえば、「中括弧は省略されていることに注意してください」などの例を含めて、JLS 9.7.3を参照してください。 Java SEの仕様状態の

+0

これは正しくありません。これは 'value'要素にのみ適用されるものではありません。 –