Kotlin klasa dane + Gson: pole opcjonalne

głosy
0

Mam następujące klasy danych w Kotlin:

import com.google.gson.annotations.SerializedName

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

Czasami trzeba utworzyć obiekt z obu dziedzin, niekiedy tylko z jednym z nich.

Jak mogę to zrobić?

EDYTOWAĆ

To nie jest duplikat to pytanie: Czy klasa dane Kotlin mieć więcej niż jeden konstruktor? To pytanie pokazuje, jak ustawić domyślną wartość pola. Ale w moim przypadku, nie trzeba serializacji pole z wartością domyślną. Chcę pole do odcinkach tylko kiedy jawnie przypisać wartość do niego.

Utwórz 19/12/2018 o 14:21
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
2

to jest łatwe trzeba użyć operatora zerowalne

import com.google.gson.annotations.SerializedName

data class RouteGroup @JvmOverloads constructor(
    @SerializedName("name") var name: String? = null,
    @SerializedName("id") var id: Int? = null
)
Odpowiedział 19/12/2018 o 15:07
źródło użytkownik

głosy
1

Może trzeba coś takiego:

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:

Można też użyć zerowalne pól i parametrów nazwanych jak poniżej:

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")
Odpowiedział 19/12/2018 o 15:05
źródło użytkownik

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