7

@RequestMappingドキュメントを読む:http ://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/bind/annotation/RequestMapping.html

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

したがって、これはjavaを使用して機能します。

@RequestMapping("MYVIEW")

しかし、scalaでは使用する必要があります:

@RequestMapping(Array("MYVIEW"))

アノテーションは文字列配列を想定しているため、scalaバージョンは理にかなっています。しかし、なぜ上記がJavaで機能するのでしょうか、コンパイル時エラーが発生しないのでしょうか。

クラス'ArrayChecker'(この点を説明するために作成したクラス)の下では、Javaコンパイル時エラーが発生します。

タイプArrayCheckerのメソッドacceptArrayParam(String [])は、引数(String)には適用できません。

public class ArrayChecker {

    public static void main(String args[]){

        String[] strArray;

        acceptArrayParam("test");
    }

    private static void acceptArrayParam(String[] param){

    }
}

@RequestMapping( "MYVIEW")によって同様のエラーが発生しないようにする必要がありますか?

4

2 に答える 2

9

Java SE仕様のセクション9.7.1には、次のように記載されています。

要素タイプが配列タイプであり、対応するElementValueがElementValueArrayInitializerでない場合、唯一の要素がElementValueによって表される値である配列値が要素に関連付けられます。それ以外の場合、対応するElementValueがElementValueArrayInitializerの場合、ElementValueArrayInitializerで表される配列値が要素に関連付けられます。

上記を明確にするコメント付き:

つまり、単一要素の配列を配列値の注釈タイプの要素に関連付ける場合は、中括弧を省略できます。

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

于 2013-01-14T18:11:05.367 に答える
0

valueこれは、デフォルト要素を使用する注釈の言語仕様の一部です。

「中括弧が省略されていることに注意してください」というコメントが付いた例を含め、例についてはJLS9.7.3を参照してください。

于 2013-01-14T18:03:51.900 に答える