Android Room 结合 Kotlin value class 使用出现构造方法错误如何解决?
结论
Android Room 从 2.6.0 版本开始正式支持 Kotlin value class(值类),你遇到的编译报错是因为使用的 Room 版本低于 2.6.0,低版本无法识别值类的类型映射规则,解析实体构造函数时无法匹配到对应字段类型。
解决方案
方案1:升级 Room 版本到 2.6.0 及以上(推荐)
只要将项目内 Room 相关依赖的版本升级到 2.6.0 或更高,不需要额外修改代码,也不需要自定义类型转换器,Room 会自动完成值类和其包裹的基础类型之间的映射,你现有代码可以直接正常编译运行。
注意需保证 Kotlin 版本不低于 1.8.0,和 Room 2.6+ 版本兼容。
方案2:低版本 Room 兼容方案
如果暂时无法升级 Room 版本,可以通过自定义 TypeConverter 实现适配:
- 定义类型转换器:
class UserTokenConverter { @TypeConverter fun fromUserToken(token: UserToken): String = token.token @TypeConverter fun toUserToken(value: String): UserToken = UserToken(value) }
- 在你的 Room Database 类上添加转换器注册注解:
@Database(entities = [TokenEntity::class], version = 1) @TypeConverters(UserTokenConverter::class) // 新增这行注册转换器 abstract class AppDatabase : RoomDatabase() { // 你的DAO定义 }
内容的提问来源于stack exchange,提问作者TootsieRockNRoll
相关产品推荐
相关产品推荐

