Kotlin 如何创建非Room类的Room注释子类?
考虑到以下初始模型,房间内的一切似乎都正常工作:Kotlin 如何创建非Room类的Room注释子类?,kotlin,android-room,android-architecture-components,Kotlin,Android Room,Android Architecture Components,考虑到以下初始模型,房间内的一切似乎都正常工作: interface ParentModel { val name: String val age: Int } @Entity(tableName = "parents") open class ParentRoom( @PrimaryKey override var name: String, override var age: Int) : ParentModel 但是,我不想使用接口,我希望它是一
interface ParentModel {
val name: String
val age: Int
}
@Entity(tableName = "parents")
open class ParentRoom(
@PrimaryKey override var name: String,
override var age: Int)
: ParentModel
但是,我不想使用接口,我希望它是一个真正的类,我可以创建实例:
open class ParentModel(open val name: String, open val age: Int)
@Entity(tableName = "parents")
open class ParentRoom(
@PrimaryKey override var name: String,
override var age: Int)
: ParentModel(name, age)
不幸的是,Room不会编译此文件,因为它认为有两列名称相同:
ParentRoom.java:7: error: Multiple fields have the same columnName: name. Field names: name, name.
public class ParentRoom extends ParentModel {
^
e: ParentRoom.java:10: error: Field has non-unique column name.
private java.lang.String name;
我之所以要覆盖这些字段,是因为这是对它们进行注释的唯一方法。这到底是可能的还是我被迫使用Room的接口?可能您不需要重写父类的字段。尝试以下声明:
open class ParentModel(@PrimaryKey val name: String, val age: Int)
@Entity(tableName = "parents")
class ParentRoom(
name: String,
age: Int)
: ParentModel(name, age)
在声明中,ParentRoom实际上有两个同名字段。房间处理器无法处理此情况。谢谢,但我正在寻找一种不涉及ParentModel的解决方案。您必须删除名为name的两个字段之一:您可以在ParentRoom或ParentModel中执行此操作。这取决于你。