Sobes.tech
Middle

Μπορείς να πάρεις μια NullPointerException σε Kotlin;

sobes.tech AI

Απάντηση από AI

Ναι, είναι δυνατόν. Παρά το αυστηρό σύστημα τύπων και τους nullable τύπους (?), το NullPointerException μπορεί να προκύψει στις ακόλουθες περιπτώσεις:

  • Κατά την κλήση κώδικα Java χωρίς annotations null-safety: Αν μια μέθοδος Java επιστρέφει null και καλείται σε Kotlin χωρίς ρητό έλεγχο null, το Kotlin μπορεί να ρίξει μια NullPointerException προσπαθώντας να προσπελάσει τα μέλη αυτού του αντικειμένου.

  • Χρήση του τελεστή !! (κλήση με επιβεβαίωση μη-null): Αυτός ο τελεστής δηλώνει ρητά ότι η τιμή δεν μπορεί να είναι null. Αν όμως είναι null, θα ρίξει μια NullPointerException.

    // Παράδειγμα χρήσης του τελεστή "!!"
    var nullableString: String? = null
    val nonNullString: String = nullableString!! // Θα ρίξει NullPointerException
    
  • Μη αρχικοποιημένες μεταβλητές lateinit var: Αν μια μεταβλητή που δηλώνεται με lateinit χρησιμοποιηθεί πριν από την αρχικοποίησή της, θα ριχτεί μια UninitializedPropertyAccessException, η οποία είναι υποκλάση της RuntimeException και μοιάζει με NullPointerException στη φύση της.

  • Παραβίαση της σύμβασης @NonNull στον Java κώδικα: Αν μια μέθοδος Java που έχει επισημανθεί με @NonNull επιστρέφει στην πραγματικότητα null, η κλήση της από Kotlin μπορεί να προκαλέσει μια NullPointerException.

  • Προβλήματα διαλειτουργικότητας με C/C++: Ο κώδικας που γράφεται σε Kotlin μπορεί να αλληλεπιδράσει με native κώδικα μέσω JNI. Σφάλματα στον native κώδικα ή λανθασμένη διαχείριση δεικτών μπορεί να οδηγήσουν σε σφάλματα ή NullPointerException στη JVM.