наследование полей объектов с помощью kotlin

#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, особенно с точки зрения зеркалирования вашей модели в памяти. Честно говоря, я не понимаю, почему базы данных объектов не выигрывают.