Ответ
Deferred в Kotlin является наследником интерфейса Job из корутин. Он расширяет Job, добавляя возможность завершения с результатом (T) или исключением.
Пример:
val deferred: Deferred<String> = async {
delay(1000)
"Result"
}
println(deferred.await()) // "Result"
Ключевые особенности:
- Может быть отменен, как
Job. - Предоставляет
await()для получения результата. - Может завершиться с исключением (если корутина выбросила ошибку).
Ответ 18+ 🔞
Э, слушай, смотри, что за зверь такой — Deferred в Котлине. Представь себе обычную Job, ну, ту самую, которую можно отменить, если что. Так вот, Deferred — это её старший брат, который не только может отмениться, но ещё и принести тебе какой-то результат. Прям как работяга, которого послал за пивом, и он может вернуться либо с бутылкой, либо с извинениями, что всё разбил.
По-умному говоря, это наследник интерфейса Job. Расширяет он его одной простой, но офигенной фишкой — возможностью завершиться либо с каким-то значением (типа T), либо с исключением, если внутри всё пошло по пизде.
Вот смотри, как это выглядит в коде, тут всё просто:
val deferred: Deferred<String> = async {
delay(1000)
"Result"
}
println(deferred.await()) // "Result"
Что тут происходит? Создаётся эта async корутина, которая тупо спит секунду, а потом выдаёт строку "Result". Но она же не сразу! Поэтому у Deferred есть волшебный метод await(). Ты его вызываешь, и он тебя блокирует до тех пор, пока эта самая корутина не выполнится. И тогда — бац! — либо результат, либо, если внутри был пиздец, исключение тебе в морду.
Короче, главные фишки Deferred:
- Можно отменить, как и любую
Job. Надоело ждать — послал нахуй. - Даёт доступ к результату через
await(). Сидишь, ждёшь, как будто заказ в ресторане. - Может ебануться с исключением. Если внутри корутины что-то пошло не так,
await()тебе это исключение и выкинет. Так что будь готов, чувак, обрабатывай ошибки, а то будет тебе хиросима.