Java 注释中不允许从伴生对象分配的静态最终值
我在Kotlin中创建了一个类: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
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() {
}