一般来说匿名函数与匿名类用于回调,因为你可能并不知道回调函数或方法的具体实现,并且可能需要根据实际情况进行改变,并且匿名函数不需要使用具体的对象,也减少了开销
下面看看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 }