Выбор ответа Middle Делегаты обновлено

Делегирование свойства в Map

Вопрос

Что произойдёт при обращении к config.port, если в map нет ключа "port"?

class Config(map: Map<String, Any?>) {
    val host: String by map
    val port: Int by map
}
val config = Config(mapOf("host" to "localhost"))

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Бросится NoSuchElementException. Делегат by map берёт значение по имени свойства через getValue, который для отсутствующего ключа бросает NoSuchElementException("Key port is missing in the map.").

Варианты ответа

  1. Вернётся 0, значение Int по умолчанию
  2. Вернётся null, хотя тип Int
  3. Ошибка компиляции: ключ не найден
  4. Бросится NoSuchElementExceptionправильный ответ

Разбор

Делегат by map берёт значение по имени свойства через getValue, который для отсутствующего ключа бросает NoSuchElementException("Key port is missing in the map."). Значения по умолчанию нет, если не обернуть мапу в withDefault. Компилятор ключи мапы не проверяет, поэтому код компилируется.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.