实现回调的两种形式

来源:互联网 发布:程序员考试下午真题 编辑:程序博客网 时间:2024/06/05 17:29

  1、通过设置回调接口来调用回调方法

<span style="font-size:18px;">//定义回调接口public interface ICallBack{       void success();       void failed();}</span>

<span style="font-size:18px;">public class CallBackImpl{   // Local类   private ICallBack mCallBack;   public void setCallBack(ICallBack callback){    <span style="color:#ff0000;">//通过设置回调接口,调用回调函数</span>         tihs.mCallBack = callback;   }   public void execute(){       mCallBack.success();   //回调接口的函数可以放置到其他方法内或者其他位置       mCallBack.failed();   }}</span>

<span style="font-size:18px;">public class Test {public static void main(String[] args) {// TODO Auto-generated method stubLocal local = new Local();local.setCallBack(new ICallBack() {@Overridepublic void success() {// TODO Auto-generated method stubSystem.out.println("回调成功方法");}@Overridepublic void faild() {// TODO Auto-generated method stubSystem.out.println("回调失败方法");}});System.out.println("开始回调");local.exeuce();  <span style="color:#ff0000;"> //开始调用匿名的回调函数</span>System.out.println("回调方法结束!!");}}</span>

  Test类后日志如下:

开始回调回调失败方法回调成功方法回调方法结束!!

2、通过设置其他类方法内的参数为回调接口,调用回调函数

 

public interface ICallBack {void success();void faild();}

public class Remote {public void excute(String message, ICallBack callBack) {try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//回调对象内的方法callBack.success();callBack.faild();}}

public class ProCallback implements ICallBack,Runnable {private Remote mRemote;private String mMessage;public ProCallback(String message,Remote remote){this.mRemote=remote;this.mMessage= message;}public void beginCallBack(){Thread thread = new Thread(this);thread.start();System.out.println("回调开始后主线程"+Thread.currentThread().getName());}@Overridepublic void success() {// TODO Auto-generated method stubSystem.out.println("回调成功方法");}@Overridepublic void faild() {// TODO Auto-generated method stubSystem.out.println("回调失败方法");}@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("开始回调,子线程"+Thread.currentThread().getName());mRemote.excute(mMessage, this);}}

public class CallBackTest {public static void main(String[] args) {// TODO Auto-generated method stubRemote remote = new Remote();ProCallback callback = new ProCallback("消息信息", remote);System.out.println("开始回调");callback.beginCallBack();System.out.println("回调结束");}}
日志如下:

开始回调回调开始后主线程main开始回调,子线程Thread-0回调结束回调成功方法回调失败方法



         

1 0
原创粉丝点击