java - 如何摆脱使用 Spring Boot 时 Detekt 发出的 SpreadOperator 性能警告?

标签 java spring kotlin detekt

最近,我添加了 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 警告的最佳做法是什么?还是不可能?

最佳答案

在您的特定情况下:

 runApplication<MessCallsApplication>(args = args)

编辑:

这个 detekt 警告不再是个案: https://github.com/detekt/detekt/pull/3157

然而,正如 Klitos Kyriacou 在代码中提到的那样——这个数组被复制了(甚至两次!)。反编译字节码:

public final class MessCallsApplicationKt {
   public static final void main(@NotNull String[] args) {
      Intrinsics.checkNotNullParameter(args, "args");
      Schedulers.enableMetrics();
      String[] args$iv = (String[])Arrays.copyOf(args, args.length);
      int $i$f$runApplication = false;
      Intrinsics.checkExpressionValueIsNotNull(SpringApplication.run(MessCallsApplication.class, (String[])Arrays.copyOf(args$iv, args$iv.length)), "SpringApplication.run(T::class.java, *args)");
   }
}

关于java - 如何摆脱使用 Spring Boot 时 Detekt 发出的 SpreadOperator 性能警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58502969/

相关文章:

java - Spring尝试将字符串保存到数据库中

java - 为什么我的 Mongo 聚合不能在嵌套文档上正常工作?

java - Kotlin找不到符号Function1构建错误

java - 在java中打印一个独特的三角形字符

java - java中如何将数字数组四舍五入为3位

java - 将任务提交到 ThreadPoolTask​​Executor 时出现 RejectedExecutionException

java - 如何将 java.util.function.Predicate 实现为 Kotlin lambda?

android - Jetpack Compose Navigation - 底部导航多个返回堆栈 - 查看模型范围问题

java - 以同步方式从 firebase 获取数据

java - 如何使用自签名证书(使用 Java keytool 创建)将 WS-Security 添加到 SOAP Web 服务?