Kotlin Datenklasse + Gson: optionales Feld

stimmen
0

Ich habe folgende Datenklasse in Kotlin:

import com.google.gson.annotations.SerializedName

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

Manchmal brauche ich ein Objekt mit den beiden Bereichen zu schaffen, manchmal mit nur einer von ihnen.

Wie kann ich das machen?

BEARBEITEN

Dies ist nicht das Duplikat dieser Frage: Kann hat Kotlin Datenklasse mehr als ein Konstruktor? Diese Frage zeigt , wie ein Standardwert für ein Feld setzen. Aber in meinem Fall brauche ich nicht das Feld mit dem Standardwert serialisiert werden . Ich möchte ein Feld nur serialisiert werden , wenn ich explizit einen Wert zuweisen.

Veröffentlicht am 19/12/2018 um 14:21
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

es ist einfach Sie den Nullable-Operator verwenden

import com.google.gson.annotations.SerializedName

data class RouteGroup @JvmOverloads constructor(
    @SerializedName("name") var name: String? = null,
    @SerializedName("id") var id: Int? = null
)
Beantwortet am 19/12/2018 um 15:07
quelle vom benutzer

stimmen
1

Sie können so etwas wie dies benötigen:

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:

Oder können Sie auf NULL festlegbare Felder und benannte Parameter wie folgt verwenden:

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")
Beantwortet am 19/12/2018 um 15:05
quelle vom benutzer

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