Расширить класс данных в Котлине

Классы данных, похоже, заменяют старомодные 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() 

По правде говоря: классы данных не слишком хорошо сочетаются с наследованием. Мы рассматриваем возможность запрещения или строгого ограничения наследования классов данных. Например, известно, что некорректно реализовать equals() в иерархии на не-абстрактных классах.

Итак, все, что я могу предложить: не использовать наследование с классами данных.

Объявлять свойства в суперклассе вне конструктора как абстрактные и переопределять их в подклассе.

 abstract class Resource { abstract var id: Long abstract var location: String } data class Book ( override var id: Long = 0, override var location: String = "", var isbn: String ) : Resource()