报告不是 const 并用作 Java 注解实参的 Kotlin 属性。

例如,具有 @JvmField 注解的属性有一个可以在编译时评估的初始值设定项,它有一个基元类型或 String 类型。

此类属性在 Kotlin 1.1-1.2 中的字节码中具有 ConstantValue 特性。 此特性允许 javac 折叠相应字段的用法并在注解中使用该字段。 在混合 Java/Kotlin 代码中单独或增量编译的情况下,这可能导致错误行为。 此行为在 Kotlin 1.3 中可能发生变化(不再有 ConstantValue 特性)。

示例:

foo.kt 文件中的 Kotlin 代码:


  annotation class Ann(val s: String)
  @JvmField val importantString = "important"

Java 代码:


  public class JavaUser {
      // 这很危险
      @Ann(s = FooKt.importantString)
      public void foo() {}
  }

要修正此问题,请将 @JvmField 注解替换为相关 Kotlin 属性上的 const 修饰符或将其内联。