一般来说匿名函数与匿名类用于回调,因为你可能并不知道回调函数或方法的具体实现,并且可能需要根据实际情况进行改变,并且匿名函数不需要使用具体的对象,也减少了开销
下面看看PHP的匿名函数应用实现
1 <html>
2 <body>
3 <?php
4 interface Comparator {
5 function compare($i, $j);
6 }
7
8 function getResult($i, $j, $comparator) {
9 echo $comparator($i, $j);
10 }
11
12 $comparator1 = function($i, $j) {
13 if($i > $j) {
14 return 1;
15 } else if($i < $j) {
16 return -1;
17 } else {
18 return 0;
19 }
20 };
21
22 $comparator2 = function($i, $j) {
23 $ilen = strlen($i);
24 $jlen = strlen($j);
25
26 if($ilen > $jlen) {
27 return 1;
28 } else if($ilen < $jlen) {
29 return -1;
30 } else {
31 return 0;
32 }
33 };
34
35 getResult(1, 2, $comparator1);
36 getResult(1, 2, $comparator2);
37
38 #或者直接这样调用
39 getResult(1, 2, function($i, $j) {
40 $ilen = strlen($i);
41 $jlen = strlen($j);
42
43 if($ilen > $jlen) {
44 return 1;
45 } else if($ilen < $jlen) {
46 return -1;
47 } else {
48 return 0;
49 }
50 });
51 ?>
52 </body>
53 </html>
再来看看JAVA匿名类的实现
MyComparator.java
1 public interface MyComparator<E> {
2 int compare(E e);
3 }
Game.java
1 public class Game<E> {
2 public void play(E[] array, MyComparator mc) {
3 int result = mc.compare(array[array.length - 1], array[0]);
4
5 if(result > 0) {
6 System.out.println("Oh no... You Win");
7 } else if(result == 0) {
8 System.out.println("Emmm... Draw");
9 } else {
10 System.out.println("Haha... You Lose");
11 }
12 }
13 }
Test.java
1 public static void main(String[] args) {
2 Game<Integer> game = new Game<Integer>();
3 Integer[] intArr = {1, 2, 3};
4 game.play(intArr, new MyComparator<Integer>() {
5 @Override
6 public int compare(Integer e1, Integer e2) {
7 if(e1 > e2) {
8 return 1;
9 } else if(e1.equals(e2)) {
10 return 0;
11 } else {
12 return -1;
13 }
14 }
15 });
16 }