> Что такое замыкание? (Java)

Уровень: junior · Роль: backend · Язык: Java · Категория: Технические вопросы

Компании: JSA GROUP

Стек: Java, C# /.NET, Go

> Пример ответа

Замыкание (closure) - это функция, которая "запоминает" окружение, в котором была создана, даже после того, как это окружение вышло из области видимости. В Java замыкания реализуются через лямбда-выражения и анонимные классы, которые захватывают переменные из внешнего контекста (при условии, что они effectively final). Например:

JAVA
public class ClosureExample {
public static void main(String[] args) {
int multiplier = 2; // effectively final
Function<Integer, Integer> multiply = (x) -> x * multiplier;
System.out.println(multiply.apply(5)); // 10
}
}

В C# замыкания естественно возникают в лямбда-выражениях и анонимных методах, захватывая переменные из внешнего метода:

CSHARP
int multiplier = 2;
Func<int, int> multiply = x => x * multiplier;
Console.WriteLine(multiply(5)); // 10

В Go замыкания - это анонимные функции, которые ссылаются на переменные из внешней области:

GO
multiplier := 2
multiply := func(x int) int {
return x * multiplier
}
fmt.Println(multiply(5)) // 10

Ключевая особенность: замыкание хранит ссылку на переменную, а не её значение, что может приводить к неожиданностям при захвате переменной цикла (например, в Go или C# до версии 5.0). В Java это предотвращается требованием effectively final.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью