Выбор ответа 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.").
Варианты ответа
- Вернётся 0, значение
Intпо умолчанию - Вернётся
null, хотя типInt - Ошибка компиляции: ключ не найден
- Бросится
NoSuchElementExceptionправильный ответ
Разбор
Делегат by map берёт значение по имени свойства через getValue, который для отсутствующего ключа бросает NoSuchElementException("Key port is missing in the map."). Значения по умолчанию нет, если не обернуть мапу в withDefault. Компилятор ключи мапы не проверяет, поэтому код компилируется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.