【发布时间】: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