java中回调

来源:互联网 发布:淘宝从哪里看消费总额 编辑:程序博客网 时间:2024/06/05 21:17

不管在java中还是android中回调都用的很多,比如自定义listview 下拉刷新,listview这个类并不知道下拉中要去实现什么功能,而只知道当用户下拉要刷新,这不就是接口的作用么,接口只定义外观,具体的实现要子类去实现,这是其一,其二,listview既然不知道下拉刷新的功能是什么,还要等调用他的类去实现,因此就要用到回调,


回调的定义:

用我个人理解的话:就是某个功能,在中间某段并不知道要实现什么,要等外部调用者调用时才知道,而在某个功能中只知道要实现什么功能,但是具体的实现确实在调用类中实现,这就是接口回调,现在用代码来解释更明白


首先定义一个接口,用于回调的

/** * 用于回调的接口 */public interface OnClickListener {void onClick();}

在定义一个Button,用于实现某些功能,

public class Button {private OnClickListener listener;private MyInterface interfacer;public void setOnClickListener(final OnClickListener listener) {this.listener = listener;}}

这是模拟android中button的点击事件,

MainClass.java

public class MainClass implements OnClickListener  {     public static void main(String[] args) {     System.out.println("this is main");       new MainClass().callBack();}          public void callBack(){     Button btn = new Button();       btn.setOnClickListener(this);     }@Overridepublic void onClick() {System.out.println("接口回调");}}


打印结果:

this is main接口回调

现在分析回调,

1:首先定义一个接口,用于回调,

2:在要被调用的类中,在这个代码中Button就是要调用的类,在这个类中setOnClickListener()方法并没有实现任何代码,只是调用了接口中的OnClick()方法,相当于声明方法体,并没有具体的实现,而在MainClass类中我们发现OnClick()方法中打印了一句话System.out.println("接口回调");这可以看做是onClick()方法具体的实现,所以说回调的方法是 声明和实现分离的,

3:注册监听器:public void setOnClickListener(OnClickListener listener) ;这个方法就是注册监听器,然后定义变量接受外部传递过来的接口变量,在外部传递过来的是接口的实现类,这里就用到了多态的概念了,

4:在Button类中定义一个方法实现某一逻辑,但是这个逻辑也是某个部分不知道怎么实现,

代码部分改动:

Button.java

public class Button {private OnClickListener listener;public void setOnClickListener(OnClickListener listener) {this.listener = listener;}public void move(){System.out.println("移动前------");listener.onClick();//比如移动中要处理很多业务System.out.println("移动后------");}}

MainClass.java

public class MainClass implements OnClickListener  {     public static void main(String[] args) {     new MainClass().callBack();}     public void callBack(){     Button btn = new Button();       btn.setOnClickListener(this);     btn.move();     }@Overridepublic void onClick() {System.out.println("移动中................");}}


调用类要做的事:

1:new 一个被调用类的对象

2:然后注册监听器

具体的代码提现在:

 Button btn = new Button();   btn.setOnClickListener(this);
被调用类还有一种写法:
Button.java<pre class="java" name="code">public class Button {public void setOnClickListener(OnClickListener listener) {System.out.println("移动前------");listener.onClick();//比如移动中要处理很多业务System.out.println("移动后------");}}

调用者也有一个写法:

public class MainClass  {     public static void main(String[] args) {     new MainClass().callBack();}     public void callBack(){     Button btn = new Button();       btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick() {System.out.println("移动中................");}});     }}

大家可以对比android中一些view的点击事件来看,就是这样的,理解接口对学设计模块有很大的帮助!希望大家一起好好学习,有什么地方讲的不对,请回复!







0 0
原创粉丝点击