java回调机制---简单例子说明

本文通过一个生动的例子解释了Java回调机制的工作原理。当你作为程序猿向暗恋的妹子打电话并等待回电,这实际上就是回调的一个体现。Girl类在特定条件下调用了预先设定的回调方法,即Person接口中的sleep方法,展示了Java中如何实现回调功能。
摘要由CSDN通过智能技术生成

            java的回调机制是我一直晕头转向的。从接触java以及android开始就听到同事说各种回调,也会在实际开发中遇到很多地方用到回调。

         终于在今天下定决心一定要搞明白java回调到底是个什么东东?


查了资料,也看了很多大神的相关文章,大概明白了点回调是怎么回事,下面我用自己理解的话来说明一下。

        经典的回调说明是:

        ·classA 实现了回调接口CallBack

        ·classA 中有classB的引用b

        ·classB 中有一个方法fly(CallBack callback, Object object){}接收一个CallBack类型的参数

        ·classB 中可以通过callback来调用classA中的回调方法d

        原理就是这样,为了说的更明了点,我举个例子:

        你不仅是个程序猿,而且还是个单身汪,每天承受着精神与肉体的双重折磨,有一天你终于觉得不能忍了,要接触女孩子,然后你拿起电话拨给一个你暗恋已久的妹子, 你说:"你最近还好吗?",妹子正在跟闺蜜吃饭,说这会儿忙等有时间给你打回去。于是挂了电话你就一直焦急的等待着手机铃声的响起。五个小时后,妹子打来电话,说:“我很好,你呢?”

        一个回调就完成了。

        下面的代码可以简单说明一下原理

  

   
package com.example.callbacktest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast; 

/**
 * MainActivity类实现了Person接口、OnClickListener接口,这里主要讨论Person接口(当然OnClickListener)
 * @author tx
 *
 */
public class MainActivity extends Activity implements Person,OnClickListener{

	private Button btn;
	private Girl girl;//girl对象的引用
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(this);//设置监听
        girl = new Girl();//girl对象
    }

	@Override
	public void sleep(String word) {
		//接收到女孩的回应后,你兴奋的将她的回应大声告诉全世界(这里的你指代MainActivity类)
		Toast.makeText(MainActivity.this, word, Toast.LENGTH_SHORT).show();
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn:
			//点击按钮,在MainActivity类中用girl对象的引用调用girl类中的方法ask(Person person, String question);
			//该ask方法接收两个参数,第一个是 回调接口Person类型的对象,第二个参数是你问女孩的问题
			girl.ask(this, "How are you?");
			break;

		default:
			break;
		}
	}
    
}

   

package com.example.callbacktest;

/**
 * 这是一个回调接口
 * @author tx
 *
 */
public interface Person {

	void sleep(String word);//唯一的抽象方法
}


package com.example.callbacktest;

/**
 * Girl类中会调用回调方法
 * @author tx
 *
 */
public class Girl {

	public void ask(Person person, String question){
		
		if ("How are you?".equals(question)) {//这个女孩被设置为只能回答一个固定的问题,如果你问的问题与她的设置刚好匹配上,那么会触发她的事件
		    //触发女孩事件后,女孩调用你重写的回调方法sleep(这里的你指代MainActivity类)
			person.sleep("I'm fine,thanks,and you ?");
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值