Какие знаешь проблемы с runCatching

«Какие знаешь проблемы с runCatching» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

runCatching – удобная обёртка для обработки исключений, но есть нюансы:

  1. Тип исключений: Ловит только Throwable, включая Error (например, OutOfMemoryError), что не всегда нужно.
  2. Подавление исключений: Если внутри блока runCatching есть ещё try-catch, исключение может быть подавлено.
  3. Null-безопасность: Возвращает Result<T>, который может содержать null, если лямбда вернула null.

Пример:

val result = runCatching { someRiskyCall() }
    .onFailure { if (it is IOException) log(it) } // Не все исключения нужно логировать
    .getOrNull() // null, если было исключение

Лучше явно указывать типы исключений или использовать try-catch для сложных сценариев.