Значение по умолчанию в Kotlin
Не каждый внешний документ содержит полный набор
ключей. Если в data class у параметра задано
значение по умолчанию, отсутствующий ключ при чтении
не считается ошибкой - подставляется default из
конструктора.
Настройки интерфейса часто описывают темой и размером шрифта. Для темы можно оставить запасной вариант прямо в объявлении:
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class UiPrefs(val theme: String = "light", val fontSize: Int)
fun main() {
val raw = """{"fontSize":16}"""
val prefs = Json.decodeFromString<UiPrefs>(raw)
println(prefs.theme)
println(prefs.fontSize)
}
Ключ theme в тексте отсутствует, поэтому
поле получает "light". Поле fontSize
берётся из JSON как 16.
При записи поля с default обычно попадают в строку только если они реально отличаются от умолчания или явно заданы в объекте. Проверим полный и укороченный объект:
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class UiPrefs(val theme: String = "light", val fontSize: Int)
fun main() {
val full = UiPrefs(theme = "dark", fontSize = 14)
val short = Json.decodeFromString<UiPrefs>("""{"fontSize":14}""")
println(Json.encodeToString(full))
println(short.theme)
}
Сделайте @Serializable AlertConfig
с channel по умолчанию "email"
и обязательным priority типа Int.
Из {"priority":2} получите объект и
выведите канал и приоритет.
Создайте AlertConfig только с приоритетом
1 через разбор короткого JSON без ключа
канала. Затем создайте объект с каналом
"sms" и тем же приоритетом, запишите
оба в текст и выведите обе строки подряд.