我在Kotlin创建了一个课程:
class Extras {
companion object {
var EXTRA_NAME: String? = null
fun setExtraName() {
var extraName: String? = null
//...
EXTRA_NAME = extraName
}
}
}
我在Application类的setExtraName()
中调用onCreate()
。
然后将EXTRA_NAME
传递给方法的注释(在Java中定义):
static final String EXTRA_NAME = Extras.Companion.getEXTRA_NAME();
@Extra(EXTRA_NAME)
void doSomething() {
}
但是,我收到以下错误:
属性值必须是常量
为什么?
答案 0 :(得分:4)
这编译并运作
annotation class Test(
val value: String
)
object Keys {
const val API_KEY = "AB"
}
@Test(Keys.API_KEY)
fun doSomething() {
}
const使值为compile-time constant,这允许将其交换到注释中。
由于注释处理器在运行时可以访问注释,因此它们必须是编译时常量,这就是为什么在Kotlin中它们必须使用const定义。