Как я могу создать аннотированный подкласс для комнаты, не относящейся к комнате? - PullRequest
0 голосов
/ 09 октября 2018

Учитывая следующую исходную модель, кажется, что все работает нормально с 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?

1 Ответ

0 голосов
/ 12 октября 2018

Возможно, вам не нужно переопределять поля родительского класса.Попробуйте с этим объявлением:

open class ParentModel(@PrimaryKey val name: String, val age: Int)

@Entity(tableName = "parents")
class ParentRoom(
    name: String,
    age: Int)
    : ParentModel(name, age)

В вашем объявлении, ParentRoom фактически имеет два поля с одинаковым именем.Комнатный процессор не может обработать эту ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...