• 回调函数透彻理解Java


    回调函数,第一次见是在Java编程思想中,以及后来的观察者模式也应用了回调函数的思想。但是一直都没有重视,终于在一次面试的时候吃亏了,越来越理解为什么很多人说Java编程思想这本书要一遍遍的看,吃透!

            首先在网络上搜索很多文章介绍什么是回调函数,看的云里雾里的。后来自己一步步分解终于理解了,记录如下。

            从维基百科上面摘抄定义:(看完本篇文章再来理解这个定义)

            计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码引用。这一设计允许了底层代码调用在高层定义的子程序

            在Java里面,我们使用接口来实现回调。

            这篇文章中的解说定义非常好:http://blog.csdn.net/sweetwxh/article/details/2067139

            所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。下面是例子。

          1.  首先定义一个类Caller,按照上面的定义就是程序员A写的程序a,这个类里面保存一个接口引用。

          

    [java] view plain copy
     
    1. public class Caller {  
    2.     private MyCallInterface callInterface;  
    3.       
    4.     public Caller() {  
    5.     }  
    6.       
    7.     public void setCallFunc(MyCallInterface callInterface) {  
    8.         this.callInterface = callInterface;  
    9.     }  
    10.       
    11.     public void call() {  
    12.         callInterface.printName();  
    13.     }  
    14. }  


           2.  当然需要接口的定义,为了方便程序员B根据我的定义编写程序实现接口。

      

    [java] view plain copy
     
    1. public interface MyCallInterface {  
    2.     public void  printName();  
    3. }  


          3.  第三是定义程序员B写的程序b

    [java] view plain copy
     
    1. public class Client implements MyCallInterface {  
    2.   
    3.     @Override  
    4.     public void printName() {  
    5.         System.out.println("This is the client printName method");  
    6.     }  
    7. }  


           4.  测试如下

    [java] view plain copy
     
    1. public class Test {  
    2.     public static void main(String[] args) {  
    3.         Caller caller = new Caller();  
    4.         caller.setCallFunc(new Client());  
    5.         caller.call();  
    6.     }  
    7. }  


          看到这里应该明白什么是回调了,有些文章介绍的很好,但是刚开始没看明白,是因为把第3步的类省略,直接写成匿名类了。

            5.  在测试方法中直接使用匿名类,省去第3步。

    [java] view plain copy
     
    1. public class Test {  
    2.     public static void main(String[] args) {  
    3.         Caller caller = new Caller();  
    4. //      caller.setCallFunc(new Client());  
    5.         caller.setCallFunc(new MyCallInterface() {  
    6.             public void printName() {  
    7.                 System.out.println("This is the client printName method");  
    8.             }  
    9.         });  
    10.         caller.call();  
    11.     }  
    12. }  


          看完了上面的文章,直接看下面这篇文章:http://kidult.iteye.com/blog/148982

          以上就是回调函数的全部理解。

     
     
  • 相关阅读:
    多重背包POJ1276不要求恰好装满 poj1014多重背包恰好装满
    哈理工1053完全背包
    求最小公倍数与最大公约数的函数
    Bus Pass ZOJ 2913 BFS 最大中取最小的
    POJ 3624 charm bracelet 01背包 不要求装满
    HavelHakimi定理(判断一个序列是否可图)
    z0j1008Gnome Tetravex
    ZOJ 1136 Multiple BFS 取模 POJ 1465
    01背包 擎天柱 恰好装满 zjut(浙江工业大学OJ) 1355
    zoj 2412 水田灌溉,求连通分支个数
  • 原文地址:https://www.cnblogs.com/snowbook/p/5802804.html
Copyright © 2020-2023  润新知