Sobes.tech
Junior

Τι συμβαίνει αν προσπελάσετε ένα nullable πεδίο ενός αντικειμένου σε Kotlin;

sobes.tech AI

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

Αν προσπελάσετε ένα nullable πεδίο ενός αντικειμένου χωρίς έλεγχο για null, θα προκληθεί εξαίρεση NullPointerException (NPE).

Για ασφαλή πρόσβαση, μπορείτε να χρησιμοποιήσετε τις ακόλουθες προσεγγίσεις:

  1. Τελεστής ασφαλούς κλήσης (?.): Επιστρέφει null αν το αντικείμενο είναι null, διαφορετικά εκτελεί την κλήση.

    // Υποθέτουμε ότι το user? είναι ένας User?
    val userName: String? = user?.name
    
  2. Τελεστής μη-null επιβεβαίωσης (!!): Επιβεβαιώνει ρητά ότι το αντικείμενο δεν είναι null. Αν είναι, ρίχνει NullPointerException.

    // Χρησιμοποιήστε συνειδητά, μπορεί να οδηγήσει σε NPE
    val userName: String = user!!.name
    
  3. Τελεστής Elvis (?:): Παρέχει μια προεπιλεγμένη τιμή αν το αριστερό αντικείμενο είναι null.

    val userName: String = user?.name ?: "Άγνωστος Χρήστης"
    
  4. Μπλοκ if ή when: Ρητός έλεγχος για null.

    if (user != null) {
        val userName = user.name
    } else {
        // Διαχείριση περίπτωσης όπου το user είναι null
    }
    
  5. Λειτουργίες let, run, apply, with με ασφαλή κλήση:

    user?.let {
        // `it` μέσα σε αυτό το μπλοκ είναι ένας μη-null `User`
        val userName = it.name
    }
    

Η επιλογή της προσέγγισης εξαρτάται από τη λογική του προγράμματος και τη συμπεριφορά που επιθυμείτε στην περίπτωση που το αντικείμενο είναι null. Συνήθως, συνιστάται η χρήση του ασφαλούς τελεστή κλήσης (?.) ή του τελεστή Elvis (?:) για την αποφυγή NPE. Ο τελεστής !! πρέπει να χρησιμοποιείται με προσοχή.