Класс данных Kotlin + Gson: необязательное поле - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть следующий класс данных в Kotlin:

import com.google.gson.annotations.SerializedName

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

Иногда мне нужно создать объект с обоими полями, иногда только с одним из них.

Как я могу это сделать?

РЕДАКТИРОВАТЬ

Это не дубликат этого вопроса: Может ли класс данных Kotlin иметь более одного конструктора? Этот вопрос показывает, какустановить значение по умолчанию для поля.Но в моем случае мне не нужно сериализовать поле со значением по умолчанию.Я хочу, чтобы поле было сериализовано, только когда я явно присвоил ему значение.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

легко использовать оператор Nullable

import com.google.gson.annotations.SerializedName

data class RouteGroup @JvmOverloads constructor(
    @SerializedName("name") var name: String? = null,
    @SerializedName("id") var id: Int? = null
)
0 голосов
/ 19 декабря 2018

Вам может понадобиться что-то вроде этого:

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()

РЕДАКТИРОВАТЬ 1:

Или вы можете использовать пустые поля и именованные параметры, например:

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...