Wydaje się, że klasy danych zastępują staromodne POJO w Javie. Można się spodziewać, że te klasy pozwoliłyby na dziedziczenie, ale nie widzę wygodnego sposobu na rozszerzenie klasy danych. Potrzebuję czegoś takiego:
open data class Resource (var id: Long = 0, var location: String = "")
data class Book (var isbn: String) : Resource()
Powyższy kod nie działa z powodu kolizji component1()
metod. Pozostawienie data
adnotacji tylko na jednej z klas też nie działa.
Być może istnieje inny idiom do rozszerzania klas danych?
UPD: Mogę data
dodawać adnotacje tylko do klasy potomnej , ale adnotacja obsługuje tylko właściwości zadeklarowane w konstruktorze. Oznacza to, że musiałbym zadeklarować wszystkie właściwości rodzica open
i zastąpić je, co jest brzydkie:
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()
które zwracają wartość N-tej właściwości. Zobacz dokumentację dotyczącą wielu deklaracji