Sobes.tech
Junior — Middle

Lambda გამოთქმა შეუძლია თუ არა მასში განსაზღვრული მეთოდის შიგნით გამოყოფილი ცვლადის წვდომა?

sobes.tech AI

პასუხი AI-სგან

Java-да lambda გამოთვლა მხოლოდ იმ შემთხვევაში შეუძლია წვდომა ადგილობრივ ცვლიანზე, თუ ეს ცვლიანი ეფექტურად საბოლოოა. ეს ნიშნავს, რომ ინიციალიზაციის შემდეგ, ცვლიანის მნიშვნელობა არ იცვლება.

მაგალითი:

public void მაგალითი() {
    int რაოდენობა = 10; // ეფექტურად საბოლოო ცვლიანი
    Runnable r = () -> System.out.println(რაოდენობა);
    r.run();
}

თუ სცადეთ შეცვალოთ რაოდენობა lambda-ის განსაზღვრის შემდეგ, კომპილატორი გამოიტანს შეცდომას.

ეს შეზღუდვა დაკავშირებულია იმასთან, რომ lambda შეიძლება შესრულდეს მოგვიანებით, და თავიდან აცილების მიზნით პრობლემებს მუტაბელური მდგომარეობის, Java მოითხოვს, რომ ასეთი ცვლადები იყოს შეუცვლელი.