Sobes.tech
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 typuNothing jest 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.