Java 回调函数的理解

      以下是我对java回调函数的理解,希望对各位有帮助。

  简而言之,假设有两个类A与B,还有一个回调接口C(有一个c方法)。其中A类持有一个B类对象作为属性和拥有一个a方法,并实现了接口C,所以A类中就有a、c两个方法。B类中就仅有b方法。当外部程序调用A对象中的方法a时,a就会调用B类对象的b方法,b方法最后又调回A类中的c方法,此过程就是一个回调。

  上面的解析有点抽象,下面我就用例子演示一下。

  首先定义一个接口(即上面解析中的C角色):

  Java代码

  package com.peng.callback;

  public interface OnEndPlay {

  public void endPlay(String program);//c方法

  }

  然后定义一个MediaPlayerService(即A角色)对象实现OnEndPlay(C角色):

  Java代码

  package com.peng.callback;

  public class MediaPlayerService implements OnEndPlay{

  private MediaPlayer player=new MediaPlayer();

  public void doPlay(String program)//a方法

  {

  player.play(this,program);

  }

  @Override

  public void endPlay(String program) //c方法

  {

  System.out.println(program+":节目播放结束!");

  }

  }

  在定义一个MediaPlayer (B角色):

  Java代码 收藏代码

  package com.peng.callback;

  public class MediaPlayer {

  public void play(OnEndPlay callback,String program)//b方法

  {

  int count=0;

  while (count<10)

  {

  System.out.println(program+":正在播放。。。。");

  count++;

  try

  {

  Thread.sleep(1000);

  } catch (InterruptedException e)

  {

  e.printStackTrace();

  }

  }

  callback.endPlay(program);

  }

  }

  最后用一个测视类测试:

  Java代码

  package com.peng.callback;

  public class Test {

  public static void main(String[] args)

  {

  final MediaPlayerService playService=new MediaPlayerService();

  final String program="湖南卫视";

  new Thread(new Runnable() {

  @Override

  public void run()

  {

  playService.doPlay(program);

  }

  }).start();

  }

  }

  运行结果为:

  湖南卫视:正在播放。。。。

  湖南卫视:正在播放。。。。

  湖南卫视:正在播放。。。。

  湖南卫视:正在播放。。。。

  湖南卫视:正在播放。。。。

  湖南卫视:正在播放。。。。

  湖南卫视:正在播放。。。。

  湖南卫视:正在播放。。。。

  湖南卫视:正在播放。。。。

  湖南卫视:正在播放。。。。

  湖南卫视:节目播放结束!

  疯狂软件学习中心是一所Java人才的专业机构,它最核心的价值在于能让应届大学毕业生与企业无缝对接,课程设计与企业需求高度结合,使其在进入企业后能立即上手。

  学真正Java技术,当然选疯狂软件Java培训机构,打造国内高级Java人才

  疯狂软件Java培训优势

  1. Java是世界第一大编程语言,市场占有率达20%。

  2.广州最专业Java培训机构,多年教学经验。

  3.学员技术牛就业率最好,就业薪资都在5000以上。

  4.部分老师还是Java技术系列书籍的作者,由这样的Java书籍原创作者讲课可想而知课程条理清晰、讲解清楚,知识面广、深度足够!

  5.疯狂软件Java培训课程以项目实战带动教学,上课打破传统课堂模式,以实训项目贯穿教学,带领学生一起做企业真实项目。

  疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。

原文地址:https://www.cnblogs.com/gojava/p/3559136.html