使用以下初始模型,Room似乎一切正常:
interface ParentModel {
val name: String
val age: Int
}
@Entity(tableName = "parents")
open class ParentRoom(
@PrimaryKey override var name: String,
override var age: Int)
: ParentModel
但是,我不想使用接口,我希望它是一个 real 类,我可以为其创建实例:
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中使用界面?
答案 0 :(得分:-1)
可能您不需要覆盖父类的字段。尝试使用以下声明:
open class ParentModel(@PrimaryKey val name: String, val age: Int)
@Entity(tableName = "parents")
class ParentRoom(
name: String,
age: Int)
: ParentModel(name, age)
在您的声明中,ParentRoom
实际上具有两个名称相同的字段。房间处理器无法处理这种情况。