【问题标题】:How Can We Reference Kotlin Constants in a Java Annotation Declaration?我们如何在 Java 注释声明中引用 Kotlin 常量?
【发布时间】:2019-12-27 16:54:55
【问题描述】:

鉴于 Kotlin 的这一点:

object OldTownRoad {
  const val COWBOY_HATS = "from Gucci"
  const val WRANGLER = "on my booty"
}

还有这个 Java 类:

public class Scrap {
  @Named(OldTownRoad.COWBOY_HATS)
  public void lilNasXrefs() {
    System.out.println(OldTownRoad.COWBOY_HATS);
    System.out.println(OldTownRoad.WRANGLER);
  }
}

编译器对println() 调用很满意。它抱怨在@Named 注释中使用COWBOY_HATS,说“属性值必须是常量”,如Android Studio 3.5.3 截图所示:

我在那些 const val 声明上尝试了 @JvmStatic@JvmField,但编译器抱怨这两者都不适用于 const 属性。

我从companion object 得到相同的结果:

class OldTownRoad {
  companion object {
    const val COWBOY_HATS = "from Gucci"
    const val WRANGLER = "on my booty"
  }
}

当从 Java 注释中引用时,是否还有其他一些 Kotlin 常量语法有效?

【问题讨论】:

  • 最终结果?.....
  • 您使用的是哪个 Kotlin 版本?我无法重现这个。
  • @RickSanchez: final const val 导致“final 是多余的修饰符”。这和final val 都不能解决问题。
  • @natario: Kotlin 1.3.61
  • @natario:感谢您指出您无法复制它!看来这是一个恶意的 Android Studio 检查错误——代码编译得很好。

标签: kotlin


【解决方案1】:

我忘了看看这是否是一个 Android Studio 错误。 :facepalm:

事实证明,如果您运行代码,它运行良好。 Android Studio 3.5.3 似乎在不必要地抱怨。

我提交了a bug report 以尝试确认问题。

非常感谢@natario,他的评论让我意识到这可能是一个 IDE 问题!

【讨论】:

  • 酷!值得我使用的是稍旧版本的 AS(仍然是 3.5)。
  • 哦,我明白了!我还有一个旧版本,3.3.2
  • 从 Kotlin 1.3.70 开始,此问题已解决(在 Android Studio 3.6.1 中)
猜你喜欢
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 2021-10-31
相关资源
最近更新 更多