最近,我在应用程序中添加了Detekt分析器。
在我运行detekt(./gradlew detekt),我得到了SpreadOperator警告在我的主要类的应用程序。
代码警告:runApplication<MessCallsApplication>(*args)
您可以在此处阅读有关SpreadOperator警告的信息:SpreadOperator Warning
我的主要课程:
@SpringBootApplication(exclude = [RedisAutoConfiguration::class])
@EnableCircuitBreaker
@EnableScheduling
class MyApplication {
companion object : KLogging()
}
fun main(args: Array<String>) {
Thread.setDefaultUncaughtExceptionHandler { _, exception ->
MessCallsApplication.logger.error(exception) { "Uncaught exception" }
}
runApplication<MessCallsApplication>(*args)
}
问题是,摆脱SpreadOperator警告的最佳实践是什么?还是不可能?
5条答案
按热度按时间tjjdgumg1#
在你的特殊情况下:
编辑:
这个detekt警告不再是一个案例:https://github.com/detekt/detekt/pull/3157
然而,正如Klitos Kyriacou在代码中提到的-这个数组被复制(甚至两次!)。反编译的字节码:
3j86kqsm2#
你可以在表达式前面加上
@Suppress("SpreadOperator")
,如下所示:qmelpv7a3#
或者简单地从以下更改:
到
fdbelqdn4#
你必须把 * 传递给run方法:
xxe27gdn5#
我在一个函数调用中这样做:
在我的特殊情况下,将this的签名更改为以下是有意义的(因为它旨在处理来自另一个函数的vararg,而不是接受逗号分隔的列表本身)。
这将使用
vararg
参数作为数组,而不是将其转换为另一个变量参数: