Java 语言中的函数编程
2009-11-12 00:00:00 来源:WEB开发网BinaryFunction 类似于前面看到的 BinaryPredicate ,是一个由 Apache Functor 提供的一般化仿函数(functor)接口。 BinaryFunction 接口有两个参数并返回一个 Object 值。类似地, UnaryFunction 是一个取一个 Object 参数并返回一个 Object 值的仿函数接口。
RightBoundFunction 是一个由 Apache 库提供的适配器类,它通过使用常量右参数(right-side argument)将 BinaryFunction 适配给 UnaryFunction 接口。即,在一个参数中收到相应的消息( evaluate ) 时,它在内部用两个参数发送一个 evaluate 消息给正在适配的 BinaryFunction ── 左边的是发送给它的参数,右边的是它知道的常量。您一定会猜到,名字 RightBoundFunction 来自于常量值是作为第二个 (右边) 参数传递这一事实。(是的,Apache 库还提供了一个 LeftBoundFunction ,其中常量是作为第一个参数或者左参数传递的。)
用于双精度相乘的特化的 BinaryFunction
清单 3 显示了名为 Multiply 的特化的 BinaryFunction ,它取两个 Double 作为输入并返回一个新的、由前两个双精度值相乘而得到 Double 。
在 calcDiscountedRate 中实例化了一个新的 RightBoundFunction ,它通过用 (1 - discountRate) 作为其常量第二参数,将二元 Multiply 函数适配为一元接口。
结果,可以用一个 Double 参数向 calcDiscountRate 发送一个名为 evaluate 的消息。在内部,输入参数 Double 乘以 calcDiscountRate 对象本身包含的常量值。
与此类似,在 calcTaxRate 中实例化了一个新的 RightBoundFunction ,它通过用 (1 + taxRate) 作为其第二个常量参数将二元 Multiply 函数适配为一元接口。结果,可以用一个 Double 参数向 calcTaxRate 发送一个名为 evaluate 的消息。在内部,输入参数 Double 乘以 calcTaxRate 对象本身包含的常量值。
更多精彩
赞助商链接