美文网首页
Java 从入门到放弃 Java有没有闭包

Java 从入门到放弃 Java有没有闭包

作者: Cocoonshu粽子 | 来源:发表于2017-11-14 14:19 被阅读36次

    什么是闭包

    用科学的说法来说,闭包就是一个函数的实例,且它可以无限制地访问那个函数的非本地变量。例如,闭包可以作为参数传递给另一个函数。它也可以访问和修改其作用域之外的变量。

    Java有没有闭包呢

    现在,Java 8的Lambda和匿名类可以做类似于闭包的事情:它们可以作为参数传递给方法,并且可以访问其作用域之外的变量。但有一个限制:它们不能修改定义Lambda的方法的局部变量的内容。这些变量必须是隐式最终的。可以认为Lambda是对值封闭,而不是对变量封闭。如前所述,这种限制存在的原因在于局部变量保存在栈上,并且隐式表示它们仅限于其所在线程。如果允许捕获可改变的局部变量,就会引发造成线程不安全的新的可能性,而这是我们不想看到的(实例变量可以,因为它们保存在堆中,而堆是在线程之间共享的)。

    相关文章

      网友评论

          本文标题:Java 从入门到放弃 Java有没有闭包

          本文链接:https://www.haomeiwen.com/subject/nedxvxtx.html