将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
相关产品推荐
相关产品推荐

