我们如何在Java注释声明中引用Kotlin常数?


13

鉴于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()调用感到满意。它抱怨COWBOY_HATS@Named批注中使用,说“属性值必须恒定”,如以下Android Studio 3.5.3屏幕截图所示:

Kotlin错误

我试着@JvmStatic@JvmField这些const val声明,但是编译器会抱怨,无论是有效的const属性。

我从中得到了相同的结果companion object

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

从Java批注引用时,还有其他一些Kotlin常量语法可以工作吗?


最终瓦尔?.....
里克·桑切斯

您正在使用哪个Kotlin版本?我无法重现。
natario

@RickSanchez:final const val结果“最终是多余的修饰符”。既final val不能解决问题,也不能解决问题。
CommonsWare,

@natario:Kotlin 1.3.61
CommonsWare,

@natario:感谢您指出您无法对其进行复制!看来这是恶意的Android Studio检查错误-代码可以正常编译。
CommonsWare,

Answers:


10

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

事实证明,如果您运行代码,则可以正常运行。Android Studio 3.5.3似乎在抱怨。

我提交了一个错误报告,试图获得对该问题的确认。

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


凉!值得的是,我使用的是AS的稍旧版本(仍为3.5)。
natario

哦,我明白了!我也有一个较旧的版本3.3.2
alvinalvord '19

1
从Kotlin 1.3.70开始,此问题已解决(在Android Studio 3.6.1中)
Matthew Bahr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.