classe de dados Kotlin + Gson: campo opcional

votos
0

Eu tenho a seguinte classe de dados em Kotlin:

import com.google.gson.annotations.SerializedName

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

Às vezes eu preciso para criar um objeto com ambos os campos, às vezes com apenas um deles.

Como posso fazer isso?

EDITAR

Esta não é a duplicata de esta pergunta: classe de dados Kotlin pode ter mais de um construtor? Essa pergunta mostra como definir um valor padrão para um campo. Mas no meu caso, eu não preciso para serializar o campo com o valor padrão. Eu quero um campo para ser serializado só quando eu atribuir explicitamente um valor a ela.

Publicado 19/12/2018 em 14:21
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

é fácil você tem que usar o operador anulável

import com.google.gson.annotations.SerializedName

data class RouteGroup @JvmOverloads constructor(
    @SerializedName("name") var name: String? = null,
    @SerializedName("id") var id: Int? = null
)
Respondeu 19/12/2018 em 15:07
fonte usuário

votos
1

Você pode precisar de algo como isto:

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:

Ou você pode usar campos anuláveis ​​e parâmetros nomeados 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")
Respondeu 19/12/2018 em 15:05
fonte usuário

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