Android Комната, как сохранить сущность, в которой одна из переменных является объектом запечатанного класса - PullRequest
0 голосов
/ 30 марта 2020

Я хочу сохранить в своей базе данных Room объект, в котором одна из переменных может быть одного типа или другой. Я думал, что закрытый класс будет иметь смысл, поэтому я выбрал такой подход:

sealed class BluetoothMessageType() {
    data class Dbm(
        val data: String
    ) : BluetoothMessageType()

    data class Pwm(
        val data: String
    ) : BluetoothMessageType()
}

Или даже это, но это не обязательно. Я обнаружил, что этот дал мне еще больше ошибок, так как он не знал, как обращаться с open val, поэтому, если я найду решение для первой версии, я все равно буду счастлив.

sealed class BluetoothMessageType(
    open val data: String
) {
    data class Dbm(
        override val data: String
    ) : BluetoothMessageType()

    data class Pwm(
        override val data: String
    ) : BluetoothMessageType()
}

Тогда сущность class

@Entity(tableName = MESSAGES_TABLE_NAME)
data class DatabaseBluetoothMessage(
    @PrimaryKey(autoGenerate = true)
    val id: Long = 0L,
    val time: Long = Instant().millis,
    val data: BluetoothMessageType
)

Я создал TypeConverter, чтобы также преобразовывать его в и из String, поэтому я предполагаю, что это не проблема.

Во-первых, возможно ли это? Я предполагаю, что это должно функционировать аналогично тому, как это было бы с абстрактным классом, но мне также не удалось найти рабочее решение с этим. Если это невозможно, какой подход следует использовать, когда я хочу сохранить некоторые данные, которые могут относиться к тому или иному типу, если не с запечатанными классами?

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