classe de données Kotlin + Gson: champ facultatif

voix
0

J'ai la classe de données suivantes dans Kotlin:

import com.google.gson.annotations.SerializedName

data class RouteGroup(
    @SerializedName(name) var name: String,
    @SerializedName(id) var id: Int
)

Parfois, je dois créer un objet avec les deux champs, parfois avec un seul d'entre eux.

Comment puis-je faire ceci?

MODIFIER

Ce n'est pas le double de cette question: peut - classe de données Kotlin avoir plus d'un constructeur? Cette question montre comment définir une valeur par défaut pour un champ. Mais dans mon cas, je ne ai pas besoin de sérialisation sur le terrain avec la valeur par défaut. Je veux un champ à sérialiser que lorsque j'attribue explicitement une valeur.

Créé 19/12/2018 à 14:21
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
2

il est facile, vous devez utiliser l'opérateur annulable

import com.google.gson.annotations.SerializedName

data class RouteGroup @JvmOverloads constructor(
    @SerializedName("name") var name: String? = null,
    @SerializedName("id") var id: Int? = null
)
Créé 19/12/2018 à 15:07
source utilisateur

voix
1

Vous devrez peut-être quelque chose comme ceci:

sealed class RouteGroup

data class RouteGroupWithName(
    @SerializedName("name") var name: String
) : RouteGroup()

data class RouteGroupWithId(
    @SerializedName("id") var id: Int
) : RouteGroup()

data class RouteGroupWithNameAndId(
    @SerializedName("name") var name: String,
    @SerializedName("id") var id: Int
) : RouteGroup()

EDIT 1:

Vous pouvez également utiliser des champs nullables et les paramètres nommés comme ceci:

data class RouteGroup(
    @SerializedName("name") var name: String? = null,
    @SerializedName("id") var id: Int? = null
)

val routeGroupWithName = RouteGroup(name = "example")
val routeGroupWithId = RouteGroup(id = 2)
val routeGroupWithNameAndId = RouteGroup(id = 2, name = "example")
Créé 19/12/2018 à 15:05
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more