`
mushme
  • 浏览: 788509 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

什么是闭包?翻译

 
阅读更多
翻译了一偏比较老的文章,翻译的很勉强。

原文地址:http://javapapers.com/core-java/java-closures/

在这篇文章,我将解释闭包是什么,并说明闭包和内部匿名类的差别,还将介绍java目前闭包的发展。
首先,我要声明以下两点:
1.在jdk1.6中我们没有闭包。
2.在java中内部匿名类不是闭包。
闭包的定义
内嵌的方法类型,我们称为闭包。我来解释下这个定义。一个匿名方法可以获取它周围的变量的快照。
闭包的定义有两部分,一部分是回调,这是一个植入点,可以把函数当作一个参数。另外一部分是回调函数嵌套一些环境信息,就象一个环境的快照。
闭包也常常被认为是一个对象类,它可以获取到闭包范围内的属性。
就象Christopher Strachey在“深入编程语言”中定义的那样,对象类可以保存在一个数据结构中,象参数一样传递,象方法一样返回,能在运行时以独立的身份运行。
数学概念中对闭包的定义是,当你操作一个set中的成员时,结果仍然是set中的成员时,这就是闭包。
匿名内部类不是闭包
java中的匿名类和闭包非常相像。匿名类不100%满足闭包的定义,但是非常接近,这也是为什么我们常常看到有文章把内部匿名类称为闭包。
为什么我说不是100%?匿名内部类职能获取被声明为final的局部变量。因为这个限制,java中的内部匿名类不是闭包。
如果你记得《memory menagement in java》这个文章,你可能记得局部变量是保存在栈中的。
这些栈在方法调用时创建,在方法返回时销毁。不同于局部变量,final类型的变量当方法返回后,也是保存的。
如果我们想把一个匿名类转化成闭包,我们应该允许它访问它周围的变量。但是根据目前的内存管理策略,当方法返回后,这些变量就不能再获得了。
java中的闭包
那么,我们将来会如何在java中实现闭包呢?Peter Ahe, James Gosling, Neal Gafter and Gilad Bracha写了一份关于闭包的说明。
它详细说明了如何在java中实现闭包,并用示例代码演示了如何使用闭包。
我们有一个实现闭包的JSR335,它名叫java中的lambda表达式。
分享到:
评论

相关推荐

    javascript闭包(Closure)用法实例简析

    1、什么是闭包 官方的回答:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 看了上面的定义,如果你不是高手,我坚信你会和我一样...

    基于三元闭包和会员闭包的社区发现算法研究 (2014年)

    社交网络即社交网络服务,源自英文 SNS(social network service)的翻译,社交网络有多种表现平台,比如QQ、微博、Facebook和微信。本文主要研究微博这一新兴的社交平台,研究微博的主要目的是搞清用户之间的种种关系...

    函数式Swift-喵神翻译

    《函数式Swift-喵神翻译》是一本专为已有Swift基础的开发者设计的深度学习书籍,旨在引导读者深入了解Swift编程语言的函数式编程特性。函数式编程是一种编程范式,它强调通过使用纯函数、避免副作用和状态变化来构建...

    iOS官方文档翻译

    这份名为"IOS官方文档翻译"的压缩包文件,显然是为了帮助中文开发者更方便地理解和应用这些知识。 文档可能包括以下几个关键部分: 1. **Swift编程语言**:Swift是iOS应用开发的主要语言,文档会详细介绍其语法...

    nodejs简单实现中英文翻译

    - `translateByGoogle`:调用谷歌翻译API并更新映射对象,此方法使用了闭包来处理并发问题,确保所有翻译请求完成后调用回调函数。 在这个实现中,核心逻辑在于`translateByGoogle`方法。它遍历`map`对象,寻找未...

    [cnswift.org翻译]最新swift 4.2 alpha中文翻译

    你现在可以在闭包和局部函数中使用 `try?`,使得错误处理更加内联和简洁。同时,`catch` 子句可以捕获特定类型的错误,增加了错误处理的精确性。 Swift 4.2 还增强了元组拆包,允许你在模式匹配中使用“where”子句...

    翻译] Lua v5.1.4手册

    函数定义使用`function`关键字,支持匿名函数和闭包。 4. **环境与作用域**:Lua的环境是通过表实现的,全局环境是一个特殊的表。`_G`全局变量指向这个环境。局部变量的作用域仅限于其定义的块。 5. **元表...

    JavaScript英文翻译

    在学习JavaScript时,理解作用域(全局和局部)和闭包的概念至关重要。此外,原型继承是JavaScript中实现面向对象编程的一种方式,而ES6引入的类和模块系统则让JavaScript的面向对象编程更加符合传统的类继承模型。 ...

    The Swift 中文完整翻译版

    此外,还介绍了闭包的概念,闭包是Swift中一种能够捕获和存储其所在上下文中变量值的函数。 第5章:枚举与结构体 讲解了枚举的语法和使用,以及与switch语句的配合。结构体是一种定义数据类型的方式,本章还比较了...

    JavaScript语言精粹(翻译版+英文版)

    这本书旨在帮助读者掌握JavaScript的核心概念,包括变量、数据类型、函数、对象、闭包、原型链等基础内容。同时,它也深入探讨了错误处理、性能优化、DOM操作以及事件处理等实践技巧。通过阅读这本书,读者可以了解...

    Python精要参考(第二版)_翻译pdf

    此外,函数式编程特性如高阶函数、闭包和装饰器也将有所涉及,这些是提高代码复用性和模块化设计的关键。 在面向对象编程方面,Python提供了丰富的类和对象支持。通过阅读本书,读者将了解类的定义、继承、封装和...

    Apple Swift官方原版中文翻译资料,非常好

    总的来说,这份"Apple Swift官方原版中文翻译资料"涵盖了Swift语言的基础到进阶内容,包括但不限于变量、常量、类型推断、控制流、函数、类与结构体、枚举、协议、错误处理、泛型、闭包、Optionals、数组、字典等...

    Lua_API中文翻译高清版

    Lua API中文翻译高清版是针对编程语言Lua的官方应用程序接口(API)的详细中文文档,旨在帮助中国开发者更好地理解和使用Lua。Lua是一种轻量级、高效、可扩展的脚本语言,广泛应用于游戏开发、系统配置、嵌入式系统...

    cpp-Rust代码和资源的精选列表中文翻译

    1. **Rust语言基础**:Rust的基础语法、类型系统、所有权模型、生命周期、闭包、枚举、模块化设计等,这些都是学习Rust的起点。 2. **Rust内存管理**:Rust的所有权规则确保了内存安全,避免了空指针异常、数据竞争...

    Swift 中文版帮助手册(The Swift Programming Language)

    《Swift 中文版帮助手册(The Swift Programming Language)》是由CocoaChina翻译整理的,这是一份为初学者量身打造的Swift语言学习资料,旨在帮助读者快速掌握Swift编程语言的基础知识和核心技术。Swift是苹果公司...

    Groovy_Recipes(中文翻译版)

    它弥补了Java的一些不足,如在Java 7、8、9之前就引入了闭包、属性、简洁的列表、映射和正则表达式语法。 Groovy_Recipes是一本独特的书籍,专注于快速掌握Groovy语言并提供实用的解决方案。书中的每个章节都组织得...

    ANSI Common Lisp 中文翻译版

    - **第六章:函数(Functions)**:深入探讨 Lisp 中函数的概念、定义方法以及高级用法,如高阶函数和闭包。 - **第七章:输入与输出(Input and Output)**:介绍了 Lisp 中处理文件和网络通信的方法。 - **第八...

Global site tag (gtag.js) - Google Analytics