Функция getValue
Функция getValue предоставляет безопасный способ получения значения
из коллекции по ключу. Она работает с типами Map, MutableMap,
List, Array и другими коллекциями, поддерживающими доступ по индексу или ключу.
Основное преимущество функции - гарантия того, что значение существует в коллекции,
иначе будет выброшено исключение NoSuchElementException.
Импорт
import kotlin.collections.getValue
Синтаксис
// Для Map и MutableMap
operator fun <K, V> Map<K, V>.getValue(thisRef: Any?, property: KProperty<*>): V
// Для List и Array
operator fun <T> List<T>.getValue(thisRef: Any?, property: KProperty<*>): T
operator fun <T> Array<T>.getValue(thisRef: Any?, property: KProperty<*>): T
Пример
Использование с Map для безопасного получения значения:
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
val value: Int = map.getValue("b")
println(value)
Результат выполнения кода:
Int 2
Пример
Использование с List для безопасного получения элемента по индексу:
val list = listOf(10, 20, 30, 40, 50)
val element: Int = list.getValue(2)
println(element)
Результат выполнения кода:
Int 30
Пример
Использование с Array для безопасного получения элемента:
val array = arrayOf('a', 'b', 'c', 'd', 'e')
val char: Char = array.getValue(3)
println(char)
Результат выполнения кода:
Char 'd'
Пример
Генерация исключения при отсутствии ключа в Map:
val map = mapOf("x" to 100, "y" to 200)
try {
val result = map.getValue("z")
println(result)
} catch (e: NoSuchElementException) {
println("Key not found: ${e.message}")
}
Результат выполнения кода:
Key not found: Key z is missing in the map.
Пример
Использование с делегированными свойствами:
val config = mapOf("timeout" to 5000, "retries" to 3)
class Connection {
val timeout by config
val retries by config
}
val conn = Connection()
println("Timeout: ${conn.timeout}, Retries: ${conn.retries}")
Результат выполнения кода:
Timeout: 5000, Retries: 3
Поддерживаемые типы коллекций
Функция getValue работает со следующими типами коллекций:
MapиMutableMap- доступ по ключуList- доступ по индексуArray- доступ по индексуSet- не поддерживается, так как Set не предоставляет доступ по ключу или индексу
Смотрите также
-
функцию
getOrElse,
которая возвращает значение по умолчанию при отсутствии ключа -
функцию
getOrNull,
которая возвращаетnullпри отсутствии ключа -
функцию
getOrDefault,
которая возвращает заданное значение по умолчанию -
функцию
containsKey,
которая проверяет наличие ключа в коллекции