当前位置: 首页 > 面试题库 >

为什么@RequestMapping注释在Java中接受String参数,但在Scala中不接受?

孙朗
2023-03-14
问题内容

阅读@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”)引起类似的错误?


问题答案:

Java
SE规范的9.7.1节规定:

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

通过评论澄清以上陈述:

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

由于Scala没有等效的数组初始化程序语法,因此必须使用Array(elems)



 类似资料:
  • 但是在scala中我需要使用: scala版本是有意义的,因为注释需要一个字符串数组。但是为什么上面的工作在java中,它不应该给出编译时错误吗? 下面的类'ArrayChecker'(我编写了一个类来说明这一点)会导致java编译时错误:

  • 我的脚本将,作为参数: 但当我将它作为分隔符传递时,它是空的 我知道在参数/参数解析中很特殊,但我以和引用的形式使用它。 为什么它不起作用?我使用的是Python 3.7.3 这是测试代码: 当我运行它作为它打印空。

  • 问题内容: 由于它可能是Java语言中使用最广泛的方法之一,因此为什么它必须接受字符串数组并且没有它就无法工作?例如,我可以一直住: 过度 除了能够接受命令行参数之外,还有其他更高的目的吗,尤其是因为绝大多数Java程序都是GUI驱动的,并且不需要通过命令行接收args? 问题答案: 甚至GUI驱动的Java应用程序也将从某些主要方法开始。“更高的目的”从来没有接受命令行参数。 目的只是接受参数。

  • 问题内容: 我一直在想是否可以在PHP中将函数作为参数传递;我想要类似的东西,当您在JS中编程时: 我想要的是在exampleMethod中的某处执行该功能。这在PHP中可行吗? 问题答案: 如果您使用的是PHP 5.3.0或更高版本,则是可能的。 请参见手册中的匿名函数。 对于您的情况,您将这样定义:

  • 问题内容: 我遇到了-在我看来-奇怪的行为: 为什么str.split()不会接受关键字参数,即使这很有意义?我在Python2和Python3中都发现了这种现象。 问题答案: 见这个bug和它的superseder。 是CPython中的本机函数,因此具有此处描述的行为: CPython实现细节: 一个实现可能会提供内置函数,这些函数的位置参数没有名称,即使出于文档目的而对其进行了“命名”,因此