Kotlin
Средний
Для чего нужны типы Unit и Nothing в Kotlin?
Unit и Nothing в Kotlin
Unit
Аналог void в Java, но является реальным типом.
fun printMessage(msg: String): Unit {
println(msg)
}
// Unit можно опустить
fun printMessage(msg: String) {
println(msg)
}
Когда Unit полезен:
// В generic-контекстах
interface Callback<T> {
fun onResult(result: T)
}
class VoidCallback : Callback<Unit> {
override fun onResult(result: Unit) {
// Ничего не возвращаем
}
}
// Лямбды
val action: () -> Unit = { println("Action") }
Nothing
Тип без значений — функция никогда не возвращается.
fun fail(message: String): Nothing {
throw IllegalStateException(message)
}
fun infiniteLoop(): Nothing {
while (true) {
// Бесконечный цикл
}
}
Применение Nothing:
// 1. Elvis с throw
val name = user?.name ?: fail("User is null")
// name точно String, не String?
// 2. TODO()
fun notImplemented(): Int {
TODO("Implement later") // Возвращает Nothing
}
// 3. Типизация пустых коллекций
val emptyList: List<Nothing> = emptyList()
// Совместим с любым List<T>
Сравнение:
| Тип | Значения | Использование |
|---|---|---|
| Unit | Одно (Unit) | Функции без результата |
| Nothing | Ноль | Функции без возврата |
| Any | Все | Базовый тип |
| Nothing? | null | Только null |
Nothing в иерархии типов:
Any
/ \
String Int ...
\ /
Nothing
Nothing — подтип всех типов, поэтому:
val x: String = TODO() // OK — Nothing подтип String
Похожие вопросы
Готовитесь к собеседованию?
ENIGMA AI — невидимый ИИ-помощник для технических интервью
Попробовать бесплатно