Выбор ответа Senior Делегаты обновлено
Исключение в инициализаторе lazy
Вопрос
Инициализатор by lazy при первом обращении бросил исключение. Что будет при втором обращении?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Инициализатор вызовется снова, неудача не запоминается. Ленивое значение сохраняется только после успешного вычисления.
Варианты ответа
- Вернётся
null, а исключение будет залогировано - Инициализатор вызовется снова, неудача не запоминаетсяправильный ответ
- Бросится то же исключение без повторного вызова
- Свойство станет навсегда недоступным до пересоздания
Разбор
Ленивое значение сохраняется только после успешного вычисления. Если инициализатор бросил исключение, следующее обращение попробует снова. Это удобно для временных сбоев, но опасно для тяжёлых операций: каждая попытка заново выполнит работу. Кеширования исключения и null нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.