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 ?");
}
}
}