• Java回调函数是什么?实现的方式有哪些


    一、什么是回调
    一般调用分下面几种:

    1. 同步调用
      a.fun()调用b.fun(),执行结束a继续执行
    2. 异步调用
      a.fun()调用b.fun(),不等执行结束a继续执行
    3. 回调(callback())
      a.fun()调用b.fun(),执行结束后调用a的一个方法。

    二、回调详解

    • 直接调用
    public class A1 {
        public static void main(String[] args) {
            A1 a = new A1();
            a.run();
        }
    
        public void run() {
            new B1().process(this);
        }
    
        public void callBack() {
            System.out.println("A1回调函数callBack");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    public class B1 {
        public void process(A1 a){
            System.out.println("B1执行函数process");
            a.callBack();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 接口调用
    public class A2 implements IA2 {
        public static void main(String[] args) {
            A2 a = new A2();
            a.run();
        }
    
        public void run() {
            IA2 a2 = new A2();
           new B2().process(a2);
    
        }
    
        public void callBack() {
            System.out.println("A2回调函数callBack");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    public interface IA2 {
        void callBack();
    }
    
    • 1
    • 2
    • 3
    public class B2 {
        public void process(IA2 a){
            System.out.println("B2执行函数process");
            a.callBack();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • Lambda 表达式(替换上面的就可以了)
    public void run() {
        new B2().process(()->{
            System.out.println("A2 Lambda表达式 回调函数callBack");
        });
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 反射
    public class A3{
        public static void main(String[] args) {
            A3 a = new A3();
            a.run();
    
        }
    
        public void run() {
            B3 b3 = new B3();
            try {
                b3.process(A3.class,A3.class.getMethod("callBack"));
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
        }
    
        public void callBack() {
            System.out.println("A3回调函数callBack");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    public class B3 {
        public void process(Class clazz, Method method){
            System.out.println("B3执行函数process");
            try {
                method.invoke(clazz.newInstance());
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    QT中的控件类概述
    思维模型 布里丹毛驴效应
    (续)SSM整合之springmvc笔记(域对象共享数据)(P136-138)
    基于django和爬虫的影视评价分析系统
    Linux命令详解(12)-crontab命令
    高颜值测试报告- XTestRunner
    GBase 8s gcadmin之rmnodes命令解析
    Qt5.9.9交叉编译(带sqlite3、OpenSSL)
    Hudi SQL DDL
    [JAVA反序列化] URLDNS
  • 原文地址:https://blog.csdn.net/qq_37752382/article/details/127961275