Junior — Middle
Na czym polegają niuanse stosowania typu Nothing w generykach?
sobes.tech AI
Odpowiedź od AI
Typ Nothing w Kotlinie to specjalny typ, który nie ma wartości i jest używany do oznaczania funkcji, które nigdy nie zwracają wyniku (np. rzucają wyjątkiem lub są wykonywane nieskończenie).
W kontekście generyków (generics) Nothing odgrywa ważną rolę:
- Używany jako dolna granica typu —
Nothingjest podtypem wszystkich typów, więc można go używać, aby wskazać, że parametr typu nie może mieć wartości. - Pozwala wyrazić brak wartości — na przykład
List<Nothing>to lista, która nie może zawierać żadnych elementów. - Stosowany do bezpiecznego wskazywania braku typu na pozycjach kowariantnych.
Przykład użycia w generykach:
fun <T> fail(): T {
throw RuntimeException("Failure")
}
val x: String = fail() // Kompilator rozumie, że fail() zwraca `Nothing`, który jest podtypem String
Lub w kolekcjach:
val emptyList: List<Nothing> = listOf()
W ten sposób Nothing pomaga kompilatorowi zrozumieć, że w niektórych miejscach nie będzie wartości, i pozwala bezpiecznie pracować z takimi przypadkami w generykach.