为什么Java Lambda也称为Closures

Cod*_*gel 9 java java-8

我目前正在浏览Java Lambda并发现它也称为Closures.

请问它有什么原因也称为闭包?我想要一个技术解释.

aio*_*obe 16

这些是在相同的上下文中经常提到的两个不同的术语.

  • 一个拉姆达基本上只是一个匿名函数.示例:() -> System.out.println("Hello").这是一个功能,但它没有名称.

  • 一个封闭是关于作用域的术语.例如,当你引用lambda中的局部变量时,如下所示

    int localInt = 17;
    
    saveThisFunction(() -> System.out.println(localInt));
    
    Run Code Online (Sandbox Code Playgroud)

    你创建一个闭包来捕获 localInt lambda内部.在文本上看起来很明显可以访问localIntlambda内部,但请记住,lambda可以在localInt从堆栈中弹出后很长时间存储和调用.

因此,创建lambda表达式通常需要创建一个闭包(隐式).