Junior — Middle
Lambda გამოთქმა შეუძლია თუ არა მასში განსაზღვრული მეთოდის შიგნით გამოყოფილი ცვლადის წვდომა?
sobes.tech AI
პასუხი AI-სგან
Java-да lambda გამოთვლა მხოლოდ იმ შემთხვევაში შეუძლია წვდომა ადგილობრივ ცვლიანზე, თუ ეს ცვლიანი ეფექტურად საბოლოოა. ეს ნიშნავს, რომ ინიციალიზაციის შემდეგ, ცვლიანის მნიშვნელობა არ იცვლება.
მაგალითი:
public void მაგალითი() {
int რაოდენობა = 10; // ეფექტურად საბოლოო ცვლიანი
Runnable r = () -> System.out.println(რაოდენობა);
r.run();
}
თუ სცადეთ შეცვალოთ რაოდენობა lambda-ის განსაზღვრის შემდეგ, კომპილატორი გამოიტანს შეცდომას.
ეს შეზღუდვა დაკავშირებულია იმასთან, რომ lambda შეიძლება შესრულდეს მოგვიანებით, და თავიდან აცილების მიზნით პრობლემებს მუტაბელური მდგომარეობის, Java მოითხოვს, რომ ასეთი ცვლადები იყოს შეუცვლელი.