WEB开发网
开发学院软件开发Java Java 语言中的函数编程 阅读

Java 语言中的函数编程

 2009-11-12 00:00:00 来源:WEB开发网   
核心提示: 方法 parseData 确实 封闭(因而有了名字 “闭包”)在 Runnable 对象的实例 worker 中,它可以像数据一样在方法之间传递,Java 语言中的函数编程(4),并可以在任何时间通过发送消息(称为 run ) 给 worker 对象而执行, 更多的例子另

方法 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 对象,将它作为基本函数应用到列表中两个元素的某种组合。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Java 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接