clase de datos Kotlin + Gson: campo opcional

votos
0

Tengo la siguiente clase de datos en Kotlin:

import com.google.gson.annotations.SerializedName

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

A veces necesito para crear un objeto con dos campos, a veces con sólo uno de ellos.

¿Cómo puedo hacer esto?

EDITAR

Este no es el duplicado de esta pregunta: ¿Puede la clase de datos Kotlin tener más de un constructor? Esa pregunta se muestra cómo configurar un valor predeterminado para un campo. Pero en mi caso, no necesito para serializar el campo con el valor por defecto. Quiero un campo para ser serializado sólo cuando le asigno un valor explícitamente a ella.

Publicado el 19/12/2018 a las 14:21
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
2

es fácil que usted tiene que utilizar el operador anulable

import com.google.gson.annotations.SerializedName

data class RouteGroup @JvmOverloads constructor(
    @SerializedName("name") var name: String? = null,
    @SerializedName("id") var id: Int? = null
)
Respondida el 19/12/2018 a las 15:07
fuente por usuario

votos
1

Es posible que tenga algo como esto:

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:

O puede utilizar campos con valores nulos y los parámetros con nombre como este:

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")
Respondida el 19/12/2018 a las 15:05
fuente por usuario

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