Junior — Middle
Μπορεί μια έκφραση lambda να έχει πρόσβαση σε μια μεταβλητή που δηλώνεται μέσα στη μέθοδο στην οποία ορίζεται;
sobes.tech AI
Απάντηση από AI
Η έκφραση lambda σε Java μπορεί να έχει πρόσβαση σε μια τοπική μεταβλητή που δηλώνεται στη μέθοδο μόνο αν αυτή η μεταβλητή είναι αποτελεσματικά τελική. Αυτό σημαίνει ότι, μετά την αρχικοποίηση, η τιμή της μεταβλητής δεν αλλάζει.
Παράδειγμα:
public void παράδειγμα() {
int αριθμός = 10; // αποτελεσματικά τελική μεταβλητή
Runnable r = () -> System.out.println(αριθμός);
r.run();
}
Αν προσπαθήσετε να αλλάξετε τον αριθμό μετά τον ορισμό της lambda, ο μεταγλωττιστής θα εμφανίσει σφάλμα.
Αυτός ο περιορισμός σχετίζεται με το γεγονός ότι η lambda μπορεί να εκτελεστεί αργότερα, και για να αποφευχθούν προβλήματα με μεταβλητές σε μεταβαλλόμενη κατάσταση, η Java απαιτεί αυτές τις μεταβλητές να είναι αμετάβλητες.