回调机制学习笔记

参考:https://blog.csdn.net/xiaanming/article/details/8703708

回调:A类中调用B类的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法

代码实例:

interface CallBack {    
    public void solve(String result);  
}  
 
class Wang implements CallBack {    
    private Li li;    
    public Wang(Li li){  
        this.li = li;  
    }  
       
    public void askQuestion(final String question){  
        //这里用一个线程就是异步,  
        new Thread(new Runnable() {  
            @Override  
            public void run() {  
                li.executeMessage(Wang.this, question);   
            }  
        }).start();  
          
        //小网问完问题挂掉电话就去干其他的事情了,诳街去了  
        play();  
    }  
  
    public void play(){  
        System.out.println("我要逛街去了");  
    }  
   
    @Override  
    public void solve(String result) {  
        System.out.println("小李告诉小王的答案是--->" + result);  
    }  
      
}  
  
class Li {   
    public void executeMessage(CallBack callBack, String question){  
        System.out.println("小王问的问题--->" + question);  
          
        //模拟小李办自己的事情需要很长时间  
        for(int i=0; i<10000;i++){  
              
        }  
           
        String result = "答案是2";    
        callBack.solve(result);            
    }  
     
}  
 
class TestHuiDiao {  
    public static void main(String[]args){    
        Li li = new Li();  
    
        Wang wang = new Wang(li);    
        wang.askQuestion("1 + 1 = ?");  
    }  
} 

说明:

1)接口中的方法solve()方法就是回调方法。

2)自己的理解:

A类(Wang)实现了接口(CallBack,该接口有一个sovle()的方法),A类(Wang)持有B类(Li)的引用,在A类(Wang)中调用了B类(Li)中的某个方法C(executeMessage())同时在方法中将A的实例(Wang.this)传给方法B(Li),然后在B类(Li)中通过传入的A的实例(Wang.this)反过来调用A类(Wang)中的方法D(solve()),D(solve())这个方法就叫做回调方法。

3)直白理解:小王中有小李的实例作为属性,开启新的线程调用小李的方法C(并将小王的实例作为参数传入),在小李类中通过传入的小王的实例调用小王的方法,从而达到回调的作用。


猜你喜欢

转载自blog.csdn.net/chenkaibsw/article/details/80487292
今日推荐