报告用作可调用引用的 kotlin.jvm.javaClass 扩展的可疑情况。

使用 ::javaClass 语法并不会像有人可能预期的那样生成 Class<T> 实例。
相反,它会创建 KProperty0<Class<T>> 类型的属性引用,在任何时候,这都是错误的,而且会导致意想不到的行为和难以检测的错误。

提供一种修正,以改用直接 .javaClass 调用或 ::class.java 语法。

示例 1:表达式接收器

::javaClass 用于表达式时,该快速修复会将其替换为常规 .javaClass 调用:


  fun test(a: String) {
      val classRef = a::javaClass  // KProperty0<Class<String>>
      println(classRef)            // 打印“property javaClass”,而非“class java.lang.String”
  }

在应用快速修复后:


  fun test(a: String) {
      val classRef = a.javaClass  // Class<String>
      println(classRef)           // 打印“java.lang.String”
  }

示例 2:类型接收器

对类型使用 ::javaClass 时,该快速修复会将其替换为 ::class.java


  fun test() {
      val classRef = String::javaClass  // KProperty1<String, Class<String>>
      println(classRef)                 // 打印“property javaClass”,而非“class java.lang.String”
  }

在应用快速修复后:


  fun test() {
      val classRef = String::class.java  // Class<Any>
      println(classRef)                  // 打印“class java.lang.String”
  }