java中的接口回调分析

接口回调的几个步骤

  • 定义一个接口和接口里面的方法
  • 声明一个接口
  • 在某个地方调用接口里面的方法
  • 通过set方法或者构造方法暴露接口(即传递接口)

举例说明

  • 功能 说明学生上课想睡觉,委托同学当老师来的时候帮忙叫一下,这时候可以用接口的方式实现
  • 实现步骤如下

代码

/**
 * 

 * @Description:定义一个接口和接口里面的方法

 * @author:徐俊

 * @time:2016年1月9日 下午3:49:17
 */
public interface OnTeacherComingListener<T> {
    void onTecacherComing();
    T onTeacherComing(String teacherName);
}

我的朋友的类

public class MyFriend {
  private OnTeacherComingListener mOnTeacherComingListener;

  public void setOnTeacherComingListener(OnTeacherComingListener onTeacherComingListener){
    mOnTeacherComingListener=onTeacherComingListener;
 }

  public void onTecacherComing(){
    if(mOnTeacherComingListener!=null){
        mOnTeacherComingListener.onTecacherComing();
    }
 }

我的类

public class Me {

    private Timer timer;

    public Me() {

    }

    public void wantSleep(){
        System.out.println("I want to sleep");
    }

    public void stopSleeping() {
        timer.cancel();
        System.out.println("TeacherComing,I can not sleep");
    }

    public void startSleeping() {
        timer = new Timer();
        long delay=1000;
        long period=2000;
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                System.out.println("当前时间是"+new Date().getTime());
                System.out.println("I am  sleeping,do not wake up me");

            }
        }, delay, period);

    }
}

主方法

public class TestInterface {

    public static void main(String[] args) {
        final Me me = new Me();
        me.wantSleep();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        System.out.println("我已经交代我的同学所有的事情Lee,可以开始睡觉了");
        MyFriend myFriend = new MyFriend();
        myFriend.setOnTeacherComingListener(new OnTeacherComingListener<String>() {

            @Override
            public void onTecacherComing() {
                me.stopSleeping();
            }

            @Override
            public String onTeacherComing(String teacherName) {
                // TODO Auto-generated method stub
                return null;
            }
        });

        me.startSleeping();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        myFriend.onTecacherComing();
    }

}

你可能感兴趣的:(java中的接口回调分析)