我目前使用 Kotlin 开发一个新的 Android 应用程序。我尝试使用 Room 进行数据存储,但是我无法使用 Kotlin 代理使其工作。
我创建了一个 Identifier
代理以确保在初始化后不会更改 id。该代理看起来像这样:
class Identifier: ReadWriteProperty<Any?, Long> {
private var currentValue = -1L
override fun getValue(thisRef: Any?, property: KProperty<*>): Long {
if (currentValue == -1L) throw IllegalStateException("${property.name} is not initialized.")
return currentValue
}
override fun setValue(thisRef: Any?, property KProperty<*>, value: Long) {
if (currentValue != -1L) throw IllegalStateException("${property.name} can not be changed.")
currentValue = value
}
}
我的实体类看起来像这样:
@Entity
class Sample {
@delegate:PrimaryKey(autoGenerate = true)
var id by Identifier()
}
当我尝试启动应用程序时,kapt会给出以下错误消息:
Cannot figure out how to save this field into database. You can consider adding a type converter for it.
private final com.myapp.persistence.delegates.Identifier id$delegate = null;
我可以不为每个委托编写TypeConverter
而使其工作吗?