Interfaces for Callbacks(Java中回调)
A common technique in the C language is to pass a pointer to a function in the argument list of another function. The receiving function can invoke the passed function using the pointer. This approach is referred to as a callback. 
通常在C中通过指针作为函数参数传递给其他函数,被调用的函数可以调用传递过来的指针来实现回调。
for example:
 void
				 callback(
				void
				)
				
				
						{
				
				void
				 callback(
				void
				)
				
				
						{//todo:write your code in here.
//回调时要做的事
 
    }
}
				
				
						 typedef   void  
				(*)(
				void
				) _callback;  //定义类型
typedef   void  
				(*)(
				void
				) _callback;  //定义类型 void
				 AnotherProc(_callback Callbacked)
				void
				 AnotherProc(_callback Callbacked) {
				
				
						{ Callbacked();
    Callbacked(); }
}
				
				
						 
						 void
				 main(
				void
				)
				
				void
				 main(
				void
				) {
				
				
						{ AnotherProc(callback);
    AnotherProc(callback); }
}
				
		
				
Callbacks are very useful in situations where you want to invoke different functions without needing to know what particular function is being invoked. For example, a plotting function could receive a pointer to a function that takes a value on the horizontal axis as an argument and returns a value for the vertical axis. The plotting function could then plot any such function that is passed to it. 
Java, however, does not provide for pointers (direct memory addresses) to methods. Instead, interfaces are used for callbacks. In this case, a method holds an interface reference in its argument list and then invokes a method in the interface.
(The Method class in the Reflection package can represent a method and can invoke it in a general manner. However, it is not recommended to use Method for callbacks. It is rather clumsy and it also loses the type checking on the arguments and return type during the compilation.)
In the following code, we see that the aFunc(Switchable obj) method invokes the getState() method of the Switchable interface. An instance of any class that implements the Switchable interface can be passed, thus providing the same generality as the pointer callbacks in C.
 public
				 
				class
				 TestCallBack
				public
				 
				class
				 TestCallBack2
 {
						
				
				
				
						{ 3
 public
						 
						static
						 
						void
						 main(String [] args)
  
						public
						 
						static
						 
						void
						 main(String [] args)4
 {
								  
						
						
								{5
 Switchable []switches 
								=
								 
								new
								 Switchable[
								2
								];
    Switchable []switches 
								=
								 
								new
								 Switchable[
								2
								];6
 switches[
								0
								] 
								=
								 
								new
								 Relay();
    switches[
								0
								] 
								=
								 
								new
								 Relay();7
 switches[
								1
								] 
								=
								 
								new
								 Relay();
    switches[
								1
								] 
								=
								 
								new
								 Relay();8
 switches[
								2
								] 
								=
								 
								new
								 Valve();;
    switches[
								2
								] 
								=
								 
								new
								 Valve();;9
 
										10
 for
								( 
								int
								 i
								=
								0
								; i
								<
								3
								; i
								++
								)
    
								for
								( 
								int
								 i
								=
								0
								; i
								<
								3
								; i
								++
								)11
 {
										    
								
								
										{ 12
 aFunc(switches[i]);
      aFunc(switches[i]);13
 }
    }
								
								 14
 }
  }
						
						
								15
 //
						 Pass Switchable objects and call their getState()
  
						//
						 Pass Switchable objects and call their getState() 
						
								16
 void
						 aFunc( Switchable obj)
						
						  
						void
						 aFunc( Switchable obj)17
 {
								  
						
						
								{ 18
 if
								(obj.getState()) doSomething();
      
								if
								(obj.getState()) doSomething();19
 }
  }
						
						
								20
 
   other code
 other code
21
 }
}
				
				 22
 
				
		Relay, & Valve definitions.
 
                    
                 
 
				 
   
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号