栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Java回调函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java回调函数

  • C、C++ 允许将函数指针作为参数传递;
  • Javascript、Python 允许将函数名作为参数传递。

在计算机程序设计中,回调函数,简称回调(Callback),是指通过函数参数传递到其他代码的,某一块可执行代码的引用。

在 main 函数中,我们异步发送一个请求,并且指定处理响应的回调函数,接着 main 函数去做其他事,而当响应到达后,执行回调函数。

当我们想要换一种“处理响应”的方法时,将必须去修改 CallBack 类的 processRequest()方法。而如果将 CallBack 类改为接口,我们就可以仅更换 CallBack 的实现了。

首先,写 CallBack 接口:

public interface CallBack {
    public void processResponse();
}

实现类:

public class CallBackImpl implements CallBack {
    @Override
    public void processResponse() {
        System.out.println("[CallBack]:处理响应");
    }
}

main方法:

public class Main {
    public static void main(String[] args) throws Exception {
        Request request = new Request();
        System.out.println("[Main]:我开个线程去异步发请求");
        CallBack callBack = new CallBackImpl();
        new Thread(() -> {
            try {
                request.send(callBack);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
        System.out.println("[Main]:请求发完了,我去干点别的");
        Thread.sleep(100000);
    }
}

例子:

1、首先定义一个回调接口,只有一个方法tellAnswer(int answer),即学生思考完毕告诉老师答案:

 public interface Callback {
 
     public void tellAnswer(int answer);
}

2、定义一个老师对象,实现Callback接口:

  public class Teacher implements Callback {
  
      private Student student;
      
      public Teacher(Student student) {
          this.student = student;
     }
     
     public void askQuestion() {
         student.resolveQuestion(this);
     }
     
     @Override
     public void tellAnswer(int answer) {
         System.out.println("知道了,你的答案是" + answer);
     }
     
}

老师对象有两个public方法:

(1)回调接口tellAnswer(int answer),即学生回答完毕问题之后,老师要做的事情

(2)问问题方法askQuestion(),即向学生问问题

3、接着定义一个学生接口,学生当然是解决问题,但是接收一个Callback参数,这样学生就知道解决完毕问题向谁报告:

public interface Student {
    public void resolveQuestion(Callback callback);
}

最后定义一个具体的学生叫Ricky:

public class Ricky implements Student {
 
    @Override
     public void resolveQuestion(Callback callback) {
        // 模拟解决问题
          try {
             Thread.sleep(3000);
         } catch (InterruptedException e) {
             
         }
         
         // 回调,告诉老师作业写了多久
         callback.tellAnswer(3);
     }
}

测试

 public class CallbackTest {
 
     @Test
     public void testCallback() {
         Student student = new Ricky();
         Teacher teacher = new Teacher(student);
         teacher.askQuestion();
     }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号