如何在Kotlin中修复警告:不推荐使用命名形式将单个元素分配给varargs

gar*_*ary 14 spring servlets kotlin

在将Kotlin从1.1.4升级到最新的1.2.22之后,我收到了很多构建警告:

[WARNING] ... (422, 29) Assigning single elements to varargs in named form is deprecated
Run Code Online (Sandbox Code Playgroud)

相关代码如下:

422     @RequestMapping(value = "/privacy", method = arrayOf(RequestMethod.GET))
423     fun mainLinkPrivacy(request: HttpServletRequest, model: MutableMap<String, Any>): String {
424 
425         var lang = request.getParameter("lang")
426 
427         if(lang == null || lang.isEmpty())
428             lang = "EN"
429 
430         model.put("lang",lang)
431 
432         return "/mobile/main/mainlink_privacy"
433     }
Run Code Online (Sandbox Code Playgroud)

以下是导入部分:

import org.apache.ibatis.annotations.Param
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.core.env.Environment
import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestMethod
import org.springframework.web.bind.annotation.RequestParam

import javax.servlet.http.HttpServletRequest
Run Code Online (Sandbox Code Playgroud)

这是我的Kotlin版本:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
    <kotlin.version>1.2.21</kotlin.version>
    <dokka.version>0.9.15</dokka.version>
    <spring.framework.version>4.3.1.RELEASE</spring.framework.version>
</properties>
Run Code Online (Sandbox Code Playgroud)

我认为问题存在method = arrayOf(),但如何解决这个问题?

我读了关于这个Deprecation的Kotlin发行说明:vararg的单个命名参数,它说:


"为了与注释中的数组文字保持一致,foo(items = i)不推荐在命名表单()中为vararg参数传递单个项目.请使用带有相应数组工厂函数的spread运算符:

foo(items = *intArrayOf(1))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,有一种优化可以消除冗余阵列的创建,从而防止性能下降.单参数形式在Kotlin 1.2中产生警告,并将在Kotlin 1.3中删除."


但我仍然没有找到关于如何修复它的提示.

asm*_*dey 15

我认为没有弃用的形式是value = ["/privacy"], method = [RequestMethod.GET].

有关如何在kotlin中使用注释的更多文档可以在这里找到