7

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

它接受一个字符串数组参数作为其路径映射。

所以这可以使用 java :

@RequestMapping("MYVIEW")

但在斯卡拉我需要使用:

@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元素的注释语言规范的一部分。

有关示例,请参见JLS 9.7.3,其中一个带有注释“请注意,省略了大括号”。

于 2013-01-14T18:03:51.900 回答