使用Room,我想写一个非原始数据类型的Kotlin @Entity
作为@PrimaryKey
。例如:
@Entity
data class MyEntity(
@PrimaryKey val myType: MyType,
val text: String
)
我在非原始类型与String之间提供TypeConverter。
class Converters {
@TypeConverter fun fromString(value: String): MyType = MyTypeUtil.parse(value)
@TypeConverter fun toString(myType: MyType) = myType.toString()
}
我还在我的数据库中正确注册了TypeConverter
:
@Database(
entities = [
MyEntity::class
],
version = 1
)
@TypeConverters(
Converters::class
)
abstract class MyDatabase : RoomDatabase() {
abstract fun myDao(): MyDao
}
编译失败:
...MyDao_Impl.java: uses unchecked or unsafe operations.
Recompile with -Xlint:unchecked for details.
答案 0 :(得分:1)
是 - Room允许非原始数据类型作为主键。
您的TypeConverters
中存在错误 - 您必须提供从String
到MyType
以及MyType
到String
的转换,因此方法{{1} }必须返回fromString
(现在它正在返回MyType
)。改变它,它应该工作:)
如果您仍然遇到奇怪的编译错误,请在进行更改后尝试清理项目。