Sobes.tech
Middle

Czy można uzyskać NullPointerException w Kotlinie?

sobes.tech AI

Odpowiedź od AI

Tak, jest to możliwe. Pomimo ścisłego systemu typów i typów nullable (?), NullPointerException może wystąpić w następujących przypadkach:

  • Wywołanie kodu Java bez adnotacji null-safety: Jeśli metoda Java zwraca null, a w Kotlinie wywołujemy tę metodę bez jawnej kontroli na null, Kotlin może rzucić NullPointerException próbując uzyskać dostęp do członków tego obiektu.

  • Użycie operatora !! (wywołanie z potwierdzeniem nie-null): Operator ten wyraźnie wskazuje, że wartość nie może być null. Jeśli jednak jest null, zostanie rzucony NullPointerException.

    // Przykład użycia operatora "!!"
    var nullableString: String? = null
    val nonNullString: String = nullableString!! // Rzuci NullPointerException
    
  • Nie zainicjalizowane zmienne lateinit var: Jeśli zmienna zadeklarowana słowem kluczowym lateinit jest używana przed inicjalizacją, zostanie rzucony UninitializedPropertyAccessException, który jest podklasą RuntimeException i z natury przypomina NullPointerException.

  • Naruszenie kontraktu @NonNull w kodzie Java: Jeśli metoda Java oznaczona @NonNull faktycznie zwraca null, wywołanie jej z Kotlin może spowodować NullPointerException.

  • Problemy z interoperacyjnością z C/C++: Kod napisany w Kotlin może współdziałać z kodem natywnym przez JNI. Błędy w kodzie natywnym lub niewłaściwe zarządzanie wskaźnikami mogą prowadzić do awarii lub NullPointerException w JVM.