首页 > 编程 > Java > 正文

Java回调接口详解

2019-11-09 16:05:53
字体:
来源:转载
供稿:网友

java回调机制详解:

回调方法: 程序员A写了一段程序(a1),其中预留了一个回调函数的接口,并且封装好了这个接口。程序员B要让a1调用自己的程序b1中的某个方法,于是他通过a1中的接口回调自己b1中的方法。达到目的 这里写图片描述WTF,你到底在说什么?????

概念看不懂?不够生动?好的,我们来掰扯掰扯:

煮一个比较实际的栗子:

人养了一只宠物狗,有一天,人被女神放鸽子了,人很生气,调用了自己的方法,揍了一顿他的狗。他的狗被揍了,也很生气,于是反咬了人一口,人感觉非常疼啊,于是他喊了一声。

在上面的栗子中,我们能够看到回调的模型。

首先: 人揍了狗,狗反咬人,人感觉疼就喊了。这就是一个回调。疑问: 怎么能够触发狗一咬人,人就喊疼呢?

这就需要回调的知识了

首先我们来画个图: 这里写图片描述

代码实例:

首先需要一个回调接口:

//回调接口,定义人被咬了以后的行为的接口,接口中的方法描述人被咬了以后的行为public interface CallBack { public void callBack();}

其次我们需要一条狗:

public class Dog { //实际上,所谓回调,不是真的让Dog去通知人喊疼。这是不合逻辑的 //所以应该是Dog内部有一个回调接口的对象,这个对象去通知人喊疼。 //而这个对象,是通过Dog进行赋值的,它的来源就是Person,因为Person实现了这个回调接口 CallBack mCallBack; public void setCallBack(CallBack callBack) { mCallBack = callBack; } public void bitePerson() { System.out.PRintln("狗反咬一口"); mCallBack.callBack(); }}

现在还需要有一个人

//人实现回调接口,就可以定义被咬以后的行为了public class Person implements CallBack { //同时需要在人内部封装一个狗对象 Dog mDog; public Person(Dog dog) { mDog = dog; //给狗内部的回调接口对象赋值 mDog.setCallBack(this); } //人揍狗的方法 public void hitDog(){ System.out.println("人不高兴,揍了狗"); mDog.bitePerson(); } //定义人被咬了以后的行为的方法,也即是回调方法 @Override public void callBack() { System.out.println("人被狗咬了 好疼啊"); }}

Main方法实现整个回调过程:

public class CallMain { public static void main(String[] args) { Person person = new Person(new Dog()); person.hitDog(); }}

有了上述的栗子,想必大家对回调应该已经没有这么陌生了,接下来,我们再煮一个栗子,吃饱一点。

模拟Android Onclick点击事件 这里写图片描述

代码实例:

模拟Activity:

public class Activity implements OnClickListener { Button mButton; /** * 模拟Android的Activity中的onCreate()方法 */ public Activity(Button button) { //模拟findViewById() mButton = button; mButton.setOnClickListener(this); } @Override public void onClick() { System.out.println("按钮被点击了"); } /** * 模拟Button点击 */ public void push() { mButton.performClick(); }}

模拟Button:

public class Button { OnClickListener mOnClickListener; public void setOnClickListener(OnClickListener onClickListener) { mOnClickListener = onClickListener; } public void performClick() { //这就是回调 mOnClickListener.onClick(); }}

模拟点击事件的回调

public interface OnClickListener { public void onClick();}

模拟点击过程的main方法

public class ClickMain { public static void main(String[] args) { Activity activity=new Activity(new Button()); activity.push(); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表