Le classi di dati sembrano essere la sostituzione ai POJO vecchio stile in Java. È abbastanza prevedibile che queste classi consentano l'ereditarietà, ma non vedo alcun modo conveniente per estendere una classe di dati. Ho bisogno di qualcosa di simile:Estendi la classe di dati in Kotlin
open data class Resource (var id: Long = 0, var location: String = "")
data class Book (var isbn: String) : Resource()
Il codice di cui sopra non riesce a causa di scontro di component1()
metodi. Lasciare l'annotazione data
in una sola delle classi non funziona anche.
Forse c'è un altro idioma per estendere le classi di dati?
UPD: Potrei annotare solo la classe child child, ma l'annotazione data
gestisce solo le proprietà dichiarate nel costruttore. Cioè, avrei dovuto dichiarare tutte le proprietà del genitore open
e sovrascrivere loro, che è brutto:
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()
Che componente1 ??? – maaartinus
Kotlin crea implicitamente metodi 'componentN()' che restituiscono il valore di N-esima proprietà. Vedi i documenti su [Multi-Declarations] (http://kotlinlang.org/docs/reference/multi-declarations.html) – Dmitry
Per aprire le proprietà, puoi anche fare l'abstract delle risorse o usare il plug-in del compilatore. Kotlin è rigido nei confronti del principio aperto/chiuso. –