【问题标题】:Why does @RequestMapping annotation accept String parameter in java but not in scala?java - 为什么@RequestMapping注释在java中接受String参数但在scala中不接受?
【发布时间】:2012-12-28 17:24:01
【问题描述】:

阅读@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[]) 不是 适用于参数(字符串)

public class ArrayChecker {

    public static void main(String args[]){

        String[] strArray;

        acceptArrayParam("test");
    }

    private static void acceptArrayParam(String[] param){

    }
}

@RequestMapping("MYVIEW")不应该引起类似的错误吗?

【问题讨论】:

    标签: java spring scala annotations


    【解决方案1】:

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

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

    【讨论】:

    • 这是不正确的,它不仅适用于value元素。
    【解决方案2】:

    Java SE 规范的9.7.1 部分指出:

    如果元素类型是数组类型,并且对应的ElementValue不是ElementValueArrayInitializer,则将唯一元素为ElementValue表示的值的数组值与该元素相关联。否则,如果对应的ElementValue是一个ElementValueArrayInitializer,则该ElementValueArrayInitializer所代表的数组值与该元素相关联。

    用评论澄清上述说明:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 2014-06-22
      相关资源
      最近更新 更多