Sobes.tech
Junior — Middle

Μπορεί μια έκφραση lambda να έχει πρόσβαση σε μια μεταβλητή που δηλώνεται μέσα στη μέθοδο στην οποία ορίζεται;

sobes.tech AI

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

Η έκφραση lambda σε Java μπορεί να έχει πρόσβαση σε μια τοπική μεταβλητή που δηλώνεται στη μέθοδο μόνο αν αυτή η μεταβλητή είναι αποτελεσματικά τελική. Αυτό σημαίνει ότι, μετά την αρχικοποίηση, η τιμή της μεταβλητής δεν αλλάζει.

Παράδειγμα:

public void παράδειγμα() {
    int αριθμός = 10; // αποτελεσματικά τελική μεταβλητή
    Runnable r = () -> System.out.println(αριθμός);
    r.run();
}

Αν προσπαθήσετε να αλλάξετε τον αριθμό μετά τον ορισμό της lambda, ο μεταγλωττιστής θα εμφανίσει σφάλμα.

Αυτός ο περιορισμός σχετίζεται με το γεγονός ότι η lambda μπορεί να εκτελεστεί αργότερα, και για να αποφευχθούν προβλήματα με μεταβλητές σε μεταβαλλόμενη κατάσταση, η Java απαιτεί αυτές τις μεταβλητές να είναι αμετάβλητες.