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