Go to the home page  / Java  / Функциональное программирование  / Лямбда-выражения  / Область видимости в лямбда-выражениях

Область видимости в лямбда-выражениях

Igor Lazarevsky, 2022.02.07 10:36

Доступ к полям класса

Лямбда-выражение, объявленное внутри метода имеет доступ к полям класса. И может их менять.

import java.util.function.Consumer;

public class Main {
    static int a = 0;
    static int b = 1;

    public static void main(String[] args) {
        Consumer<Integer> lambda = (x) -> {
            a = x;
        };
        lambda.accept(42);
        System.out.println(a);
    }
}
    // значение x изменилось
    // выведет 42

Доступ к локальным переменным

А локальные переменные лямбда может читать, но менять не может

import java.util.function.Consumer;

public class Main {
    static int a = 0;
    static int b = 1;

    public static void main(String[] args) {
        int localInt = 11;
        Consumer<Integer> lambda = (x) -> {
            System.out.println(localInt); // так можно
           // localInt = x; // а так нельзя
        };
        lambda.accept(42);
    }
}
Igor Lazarevsky, 2022.02.07 10:37