首页 > 解决方案 > 注释中不允许从伴随对象分配的静态最终值

问题描述

我在 Kotlin 中创建了一个类:

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

        fun setExtraName() {
           var extraName: String? = null
           //...
           EXTRA_NAME = extraName
        }
    }
}

我正在调用setExtraName()应用onCreate()程序类。

然后传递EXTRA_NAME给方法的注解(在Java中定义):

static final String EXTRA_NAME = Extras.Companion.getEXTRA_NAME();

@Extra(EXTRA_NAME)
void doSomething() {
}

但是,我收到以下错误:

属性值必须是常量

为什么?

标签: javaandroidkotlinannotations

解决方案


解决这个问题

这编译和工作

annotation class Test(
    val value: String
)

object Keys {
    const val API_KEY = "AB"
}

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

}

const 使该值成为编译时常量,这允许将其交换到注释中。

为什么需要这个

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


推荐阅读