关闭

java回忆录——接口回调机制(1)

标签: Javacallbackandroid
184人阅读 评论(0) 收藏 举报
分类:

回忆一些丢了的东西,蛮有心得的


在java中回调机制是用得很多的,比如Runnable 中的run方法 ,在Android里面也大量用到了这种机制,其实也不是很难,在生活中我们也遇到这个 最明显的就是打电话。

什么是回调,网上有很多通俗的解释:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调 ,其实就是:我打你脑袋(A类中调用B类中的某个方法C),你抽我大嘴巴子(B类中反过来调用A类中的方法D)这个大嘴巴子就是回调咯,这形象了吧 ^_^

好上代码吧

首先有一个回调的CallBack 接口  自然就有实现类 A

package org.blueskytoolkit.source.callback;

/**
 * 回调接口
 * @author zw
 * 2016年5月30日下午3:16:10
 */
public interface CallBack {

	public void message(String meg);
}

实现类A

package org.blueskytoolkit.source.callback;

/**
 * 实现回调
 * @author zw
 * 2016年5月30日下午3:19:10
 */
public class A implements CallBack {

	/**
	 * 回调的结果
	 * 也就是大嘴巴子
	 */
	@Override
	public void message(String meg) {
		System.err.println(meg);
	}
   private B b;   
   public A(B b){  
       this.b = b;  
   }  
    
   /**
    * A 中的方法
    * @param question
    */
   public void askQuestion(final String question){  
	   System.err.println(question); 
       //这里用一个线程就是异步,  
       new Thread(new Runnable() {  
           @Override  
           public void run() {  
               //调用b中“脑袋”
               b.executeMessage(A.this, question);   
           }  
       }).start();  
         
       other();  
   }  
 
   /**
    * 你懵逼了一会 
    */
   public void other(){  
       System.err.println("执行其他事物---等待B反馈结果");  
   }  

}

package org.blueskytoolkit.source.callback;

public class B {
	 
	/**
	 * 
	 * @param callBack 其实可以理解为 A 对象
	 * @param question A对象传过来的信息
	 */
    public void executeMessage(CallBack callBack, String question){  
        System.err.println("B接收到: "+question);  
          /**
           * 模拟耗时操作
           */
        for(int i=0; i<10000;i++){  
              
        }  
          
        String result = "我是B-- 接收到反馈意见,并已采纳,非常感谢";  
        /**
         * 把耗时结果返回回调接口
         * 我打你大嘴巴子
         */
        callBack.message(result);   
    }  
}

好了代码基本就是以上这些

测试代码

package org.blueskytoolkit.source.callback;

public class Test {

	  public static void main(String[] args) {
		  B b = new B();  
		   
	      A a = new A(b);  
	       
	      /**
	       * 异步调用b中的方法
	       */
	      a.askQuestion("我是A -- 我在给B反馈意见");
	}
}


嗯~~现在应该懂了吧,刚开始学的时候也是蒙了  什么鬼回调接口,其实用生活中的一些现象解释就很容易懂了

希望能帮助到你们


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:128104次
    • 积分:2196
    • 等级:
    • 排名:第17830名
    • 原创:94篇
    • 转载:37篇
    • 译文:0篇
    • 评论:32条
    最新评论