#kotlin #inheritance #objectbox
#kotlin #наследование #objectbox
Вопрос:
Документация ObjectBox дает несколько примеров того, как вы можете использовать наследование. Однако в нем приведен пример на Java, а не на Kotlin. В примерах Kotlin, которые он дает, используются классы данных Kotlin, которые, насколько я понимаю, не поддерживают наследование. Возможно ли это в object box, и если да, можете ли вы указать на пример?
Ответ №1:
Прежде всего, по возможности и в большинстве случаев наследование не должно использоваться с классами сущностей.
Если это абсолютно необходимо, можно отразить пример Java в Kotlin, используя обычные классы Kotlin против Классы данных Kotlin. Нет никаких ограничений на использование только классов данных.
Например, это должно сработать:
// Superclass:
@BaseEntity
abstract class Base {
@Id
var id: Long = 0
var baseString: String? = null
constructor()
constructor(id: Long, baseString: String?) {
this.id = id
this.baseString = baseString
}
}
// Subclass:
@Entity
class Sub : Base {
var subString: String? = null
constructor()
constructor(id: Long, baseString: String?, subString: String?) : super(id, baseString) {
this.subString = subString
}
}
Комментарии:
1. Добавлены примеры Kotlin в документы: docs.objectbox.io/advanced/entity-inheritance
2. Спасибо. Почему наследование не должно использоваться?
3. Это делает ненужные вещи сложными. Использование классов данных гарантирует, что объект является автономным и отражает поведение базы данных (например, нет такого понятия, как наследование).
4. ОК. Понятно. Я не вижу, чтобы эти базы данных nosql куда-либо двигались, если они не могут предложить что-то более осязаемое по сравнению с базами данных SQL, особенно с точки зрения зеркалирования вашей модели в памяти. Честно говоря, я не понимаю, почему базы данных объектов не выигрывают.