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

时间:2018-05-11 20:25:29

标签: java android kotlin annotations

我在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() {
}

但是,我收到以下错误:

  

属性值必须是常量

为什么?

1 个答案:

答案 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定义。