You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Java注解类转为Kotlin时遇“注释参数需为编译时常量”错误

解决注解参数必须是编译时常量的问题

问题原因

Java中注解内部的字段默认是public static final类型的编译时常量,但自动转换后的Kotlin代码里,companion object中的字段用了var修饰——var是可变变量,不属于编译时常量,所以无法作为@StringDef的注解参数使用,触发了An annotation argument must be a compile-time constant错误。

修复后的Kotlin代码

@StringDef(
    BillingEnum.ALL,
    BillingEnum.PAID,
    BillingEnum.PENDING,
    BillingEnum.OVERDUE,
    BillingEnum.OPEN,
    BillingEnum.DELETED
)
annotation class BillingEnum {
    companion object {
        const val ALL = ""
        const val PAID = "paid"
        const val PENDING = "pending"
        const val OVERDUE = "overdue"
        const val OPEN = "open"
        const val DELETED = "deleted"
    }
}

关键说明

  • 在Kotlin中,只有const val修饰的顶级变量或companion object中的变量才会被视为编译时常量,满足注解参数的要求。
  • var修饰的变量是可变的,编译时无法确定其固定值,因此不能用于注解参数。

内容的提问来源于stack exchange,提问作者Gustavo Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:06:20