为什么@RequestMapping注释在java中接受String参数但在scala中不接受?

blu*_*sky 6 java spring annotations scala

阅读@RequestMapping文档:http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/bind/annotation/RequestMapping.html

它接受String数组参数用于其路径映射.

所以这适用于java:

@RequestMapping("MYVIEW")
Run Code Online (Sandbox Code Playgroud)

但在scala我需要使用:

@RequestMapping(Array("MYVIEW"))
Run Code Online (Sandbox Code Playgroud)

scala版本有意义,因为注释需要String数组.但是为什么上面的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){

    }
}
Run Code Online (Sandbox Code Playgroud)

是否应该由@RequestMapping("MYVIEW")引起类似的错误?

Ale*_*rlo 7

Java SE规范的第9.7.1节规定:

如果元素类型是数组类型且相应的ElementValue不是ElementValueArrayInitializer,则其唯一元素是ElementValue表示的值的数组值与该元素相关联.否则,如果相应的ElementValue是ElementValueArrayInitializer,则ElementValueArrayInitializer表示的数组值与该元素相关联.

通过评论澄清上述说明:

换句话说,当单元素数组与数组值注释类型元素相关联时,允许省略花括号.

因为Scala没有等效的数组初始化语法,所以必须使用Array(elems).