Классы данных, кажется, заменяют старомодные POJO в Java. Вполне ожидаемо, что эти классы позволят наследовать, но я не вижу удобного способа расширить класс данных. Что мне нужно, это что-то вроде этого:
open data class Resource (var id: Long = 0, var location: String = "")
data class Book (var isbn: String) : Resource()
Приведенный выше код не работает из-за столкновения component1()
методов. Оставить data
аннотацию только в одном из классов тоже не нужно.
Возможно, есть другая идиома для расширения классов данных?
UPD: я мог бы аннотировать только дочерний дочерний класс, но data
аннотация обрабатывает только свойства, объявленные в конструкторе. То есть я должен был бы объявить все родительские свойства open
и переопределить их, что ужасно:
open class Resource (open var id: Long = 0, open var location: String = "")
data class Book (
override var id: Long = 0,
override var location: String = "",
var isbn: String
) : Resource()
componentN()
которые возвращают значение N-го свойства. Смотрите документы по мульти-декларациям