Escriu per cercar…

Polimorfisme

Per defecte la serialització és completament estàtica respecte els tipus, però en la serialització de estructures de dades polimòrfiques el tipus de les dades es determina en temps d'execució.

Per defecte la serialització és completament estàtica respecte els tipus: l’estructura del objectes codificats es determina en temps de compilació pel tipus dels objectes. Però en la serialització de estructures de dades polimòrfiques el tipus de les dades es determina en temps d’execució.

Closed polymorphism

Static types

Per mostrar la naturalesa estàtica de la serialització de Kotlin, fem la configuració següent: la classe open class Project només té la propietat name, mentre que la classe derivada class OwnedProject afegeix un propietat owner:

kotlin
@Serializable
open class Project(val name: String)

class OwnedProject(name: String, val owner: String) : Project(name)

fun main() {
    val data: Project = OwnedProject("kotlinx.coroutines", "kotlin")
    println(Json.encodeToString(data))
}

Com que em declarat la variable data amb el tipus Project, l’instància data és serialitza com a Project encara sigui una instància de OwnedProject:

json
{ "name": "kotlinx.coroutines" }

Pots veure que encara que la instància tingui un valor per la propietat owner aquesta no es serialitza.

Si canviem el tipus de la variable data a OwnedProject:

kotlin
@Serializable
open class Project(val name: String)

class OwnedProject(name: String, val owner: String) : Project(name)

fun main() {
    val data = OwnedProject("kotlinx.coroutines", "kotlin")
    println(Json.encodeToString(data))
}

Però ara tenim un error en temps d’execució perquè la classe OwnedProject no és serializable:

shell
Exception in thread "main" kotlinx.serialization.SerializationException: Serializer for class 'OwnedProject' is not found.
Please ensure that class is marked as '@Serializable' and that the serialization compiler plugin is applied.

Estàs llegint una vista prèvia.

Inicia sessió per llegir l'article complet. Qualsevol compte obre 4 articles gratuïts al mes; l'alumnat i el professorat llegeixen les pàgines del seu curs sense límit.

Inicia sessió