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

时间:2013-01-14 17:45:57

标签: java spring scala annotations

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

它接受一个String数组参数用于其路径映射。

所以这可以使用java:

@RequestMapping("MYVIEW")

但在scala我需要使用:

@RequestMapping(Array("MYVIEW"))

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){

    }
}

@RequestMapping(“MYVIEW”)不会导致类似的错误吗?

2 个答案:

答案 0 :(得分:7)

Java SE规范的9.7.1部分声明:

  

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

通过评论澄清以上陈述:

  

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

由于Scala没有等效的数组初始值设定项语法,因此必须使用Array(elems)

答案 1 :(得分:0)

这是使用默认value元素的注释的语言规范的一部分。

请参阅JLS 9.7.3以获取示例,包括注释“请注意省略花括号。”