快速业务通道

跨越边界: 闭包 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
易。例如,若要处理一项事务,采用闭包后,您就能确 保事务代码总能由适当的函数调用界定。框架代码能处理策略,而在闭包中提供的用户代码能定制此策略 。清单 13 是基本的使用模式:

清单 13. 实施策略

def do_transaction   begin     setup_transaction     yield     commit_transaction   rescue     roll_back_transaction   end end

Java 语言中的闭包

Java 语言本身还没有正式支持闭包,但它却允许模拟闭包。可以使用匿名的内部类来实现闭包。和 Ruby 使用这项技术的原因差不多,Spring 框架也使用这项技术。为保持持久性,Spring 模板允许对结 果集进行迭代,而无需关注异常管理、资源分配或清理等细节,从而为用户减轻了负担。清单 14 的例子 取自于 Spring 框架的示例宠物诊所应用程序:

清单 14. 使用内部类模拟闭包

JdbcTemplate template = new JdbcTemplate(dataSource); final List names = new LinkedList(); template.query("SELECT id,name FROM types ORDER BY name",               new RowCallbackHandler() {                 public void processRow(ResultSet rs)                    throws SQLException                 {                   names.add(rs.getString(1));                 }                });

编写清单 14 中的代码的程序员不再需要做如下这些事:

打开联接

关闭联接

处理迭代

处理异常

处理数据库-依赖性问题

程序员们不用再为这些问题烦恼,因为该框架会处理它们。但匿名内部类只是宽泛地近似于闭包,它 们并没有深入到您需要的程度。请看清单 14 中多余的句子结构。这个例子中的代码至少一半是支持性代 码。匿名类就像是满满一桶冰水,每次用的时候都会洒到您的腿上。多余句子结构所需的过多的额外处理 阻碍了对匿名类的使用。您迟早会放弃。当语言结构既麻烦又不好用时,人们自然不会用它。缺乏能够有 效使用匿名内部类的 Java 库使问题更为明显。要想使闭包在 Java 语言中实践并流行起来,它必须要敏 捷干净。

过去,闭包绝不是 Java 开发人员优先考虑的事情。在早期,Java 设计人员并不支持闭包,因为 Java 用户对无需显式完成 new 操作就在堆上自动分配变量心存芥蒂(参见 参考资料)。 如今,围绕是 否将闭包纳入到基本语言中存在极大的争议。最近几年来,动态语言(如 Ruby、JavaScript,甚至于 Lisp )的流行让将闭包纳入 Java 语言的支持之声日益高涨。从目前来看,Java 1.7 最终很可能会采纳 闭包。只要不断跨越边界,总会好事连连。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号