在C语言中有一个非常重要的概念-函数指针,其最重要的功能是实现回调函数(指函数先在某处注册,而它将在稍后某个需要的时候被调用)在java语言中没有指针的概念,但是可以利用接口和指针实现类似的功能,具体而言,应先定义一个接口,最后把这个实现类的一个对象作为参数传递给调用程序,调用程序通过这个参数来调用指定的函数,从而实现回调函数(这里接口就像是注册的地方,实现类就是“注册人”,当实现类作为形参时,就是在需要的时候)
package strateryDemo; import java.util.Arrays; //这个在Think in java 也有类似的例子 interface IntCompare { public int cmp(int a, int b); } class Cmp1 implements IntCompare { @Override public int cmp(int a, int b) { if (a > b) { return 1; } else if (a < b) { return -1; } return 0; } } class cmp2 implements IntCompare { @Override public int cmp(int a, int b) { if (a > b) { return -1; } else if (a < b) { return 1; } return 0; } } public class StrateryTest { public static void insertSort(int[] a, IntCompare cmp) { if (a != null) { for (int i = 1; i < a.length; i++) { int temp = a[i], j = i; if (cmp.cmp(a[j - 1], temp) == 1) { while (j >= 1 && cmp.cmp(a[j - 1], temp) == 1) { a[j] = a[j - 1]; j--; } } a[j] = temp; } } } public static void main(String[] args) { int[] arr1 = { 2, 4, 56, 72, 1, 54, 68798 }; insertSort(arr1, new Cmp1()); System.out.println(Arrays.toString(arr1)); int[] arr2 = { 223, 42, 56, 72, 1, 54, 68798 }; insertSort(arr2, new cmp2()); System.out.println(Arrays.toString(arr2)); } }