Java 注释中不允许从伴生对象分配的静态最终值

Java 注释中不允许从伴生对象分配的静态最终值,java,android,kotlin,annotations,Java,Android,Kotlin,Annotations,我在Kotlin中创建了一个类: class Extras { companion object { var EXTRA_NAME: String? = null fun setExtraName() { var extraName: String? = null //... EXTRA_NAME = extraName } } } 我正在应用程序类的onCrea

我在Kotlin中创建了一个类:

class Extras {
    companion object {
        var EXTRA_NAME: String? = null

        fun setExtraName() {
           var extraName: String? = null
           //...
           EXTRA_NAME = extraName
        }
    }
}
我正在应用程序类的
onCreate()
中调用
setExtraName()

然后将
EXTRA\u NAME
传递给方法的注释(在Java中定义):

但是,我得到了以下错误:

属性值必须是常量

为什么?

修复此问题 这是编译和工作

annotation class Test(
    val value: String
)

object Keys {
    const val API_KEY = "AB"
}

@Test(Keys.API_KEY)
fun doSomething() {

}
const将值设为a,这允许将其交换到注释中

为什么需要这样做
由于注释处理器在运行前可以访问注释,因此它们必须是编译时常量,这就是为什么在Kotlin中必须使用常量来定义注释。

我不是Kotlin方面的专家,但是你的
API_键
不应该是
val
吗?上面的
final
就是一个例子。在实际情况中,我正在计算将值赋给常量,该常量在注释中进一步设置。@Turing85问题已更新。虽然这解决了问题,但并没有回答OP的解决方案不起作用的问题。@Turing85我添加了一些解释谢谢您回答@jrtapsell。但是,如果要交换到注释的值不是
常量
,该怎么办。请检查更新的问题。在运行时更改注释需要大量的思考],并且可能非常脆弱(好答案!)
annotation class Test(
    val value: String
)

object Keys {
    const val API_KEY = "AB"
}

@Test(Keys.API_KEY)
fun doSomething() {

}