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 nanull, Kotlin może rzucićNullPointerExceptionpró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 jestnull, zostanie rzuconyNullPointerException.// 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 kluczowymlateinitjest używana przed inicjalizacją, zostanie rzuconyUninitializedPropertyAccessException, który jest podklasąRuntimeExceptioni z natury przypominaNullPointerException. -
Naruszenie kontraktu
@NonNullw kodzie Java: Jeśli metoda Java oznaczona@NonNullfaktycznie zwracanull, 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
NullPointerExceptionw JVM.