Java 语言中的函数编程
2009-11-12 00:00:00 来源:WEB开发网方法 parseData 确实 封闭(因而有了名字 “闭包”)在 Runnable 对象的实例 worker 中。它可以像数据一样在方法之间传递,并可以在任何时间通过发送消息(称为 run ) 给 worker 对象而执行。
更多的例子
另一个在面向对象世界中使用闭包和高阶函数的例子是 Visitor 模式。基本上,Visitor 模式展现一个称为 Visitor 的参与者,该参与者的实例由一个复合对象(或者数据结构)接收,并应用到这个数据结构的每一个构成节点。Visitor 对象实质上 封闭 了处理节点/元素的逻辑,使用数据结构的 accept (visitor) 方法作为应用逻辑的高阶函数。
通过使用适当不同的 Visitor 对象(即闭包),可以对数据结构的元素应用完全不同的处理逻辑。与此类似,可以向不同的高阶函数传递同样的闭包,以用另一种方法处理数据结构(例如,这个新的高阶函数可以实现不同逻辑,用于遍历所有构成元素)。
类 java.utils.Collections 提供了另一个例子,这个类在版本 1.2 以后成为了 Java 2 SDK 的一部分。它提供的一种实用程序方法是对在 java.util.List 中包含的元素排序。不过,它使调用者可以将排序列表元素的逻辑封装到一个类型为 java.util.Comparator 的对象中,其中 Comparator 对象作为第二个参数传递给排序方法。
在内部, sort 方法的引用实现基于 合并-排序(merge-sort) 算法。它通过对顺序中相邻的对象调用 Comparator 对象的 compare 方法遍历列表(list)中的元素。在这种情况下, Comparator 是闭包,而 Collections.sort 方法是高阶函数。这种方式的好处是明显的:可以根据在列表中包含的不同对象类型传递不同的 Comparator 对象(因为如何比较列表中任意两个对象的逻辑安全地封装在 Comparator 对象中)。与此类似, sort 方法的另一种实现可以使用完全不同的算法(比如说, 快速排序(quick-sort)) 并仍然重复使用同样的 Comparator 对象,将它作为基本函数应用到列表中两个元素的某种组合。
更多精彩
赞助商链接