Higher Order Functions

A higher order function is a function that treats other functions as data.

在 Java 7 及之前的版本, memory boxes (variables) 不能包含指向 functions 的 pointers, 也就是无法给 functions 指定 types. 所以不能像Python一样直接把 function 作为参数传递到另一个 function 中。只能借用 interface:

public interface IntUnaryFunction {
    int apply(int x);
}
// 定义一个方法
public class TenX implements IntUnaryFunction {
    /* Returns ten times the argument. */
    public int apply(int x) {
        return 10 * x;
    }
}

// 高阶方法
public static int do_twice(IntUnaryFunction f, int x) {
    return f.apply(f.apply(x));
}

// 调用高阶方法
System.out.println(do_twice(new TenX(), 2));

在JAVA 8中,提供了很多函数式的接口。Java 8 引入 java.util.Function<T, R>接口, 可以接受存储一个函数,<T, R>对应该函数的参数和返回对象

Call Back

Java接口提供了回调(call back)的能力:

  • 有时一个函数需要调用另一个尚未写好的 helper function, 这时这个 helper function 就是 call back。比如“排序函数”需要“比较函数”的帮助。
  • 不同语言对于回调有不同的处理方式

比如Java的 Insertion Sort 可以排序任何类型的数据Insertion.sort(a);, a可以是Double, String, java.io.File数组. 在这里Callback就是对一个可执行代码的引用:

・Client passes array of objects to sort() function. ・The sort() function calls back object’s compareTo() method as needed.