Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何创建非Room类的Room注释子类?_Kotlin_Android Room_Android Architecture Components - Fatal编程技术网

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中执行此操作。这取决于你。