Java 回调

要是觉得内容枯燥,您可以点击左下角的播放按钮,让您在音乐的熏陶下愉快的阅读

本文总字数:2321

 

•武林秘籍

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

——摘自维基百科(看完本篇文章再来理解这个定义)

•民间偏方

  所谓的回调,就是程序员 A 写了一段程序(程序 a ),其中预留有回调函数接口,并封装好了该程序。

  程序员 B 要让 a 调用自己的程序 b 中的一个方法;

  于是,他通过 a 中的接口回调自己 b 中的方法。

•该吃药了

第一步

  首先定义一个类 A,按照上面的定义就是程序员 A 写的程序 a,这个类里面保存一个接口引用;

  新建一个  A.java ,并添加如下代码;

复制代码
public class A {
    
    CallBack callBack;
    
    public void setCallBack(CallBack callBack) {
        this.callBack = callBack;
    }
    
    public void call() {
        callBack.print(10);
    }
}
复制代码

第二步

  当然需要接口的定义,为了方便程序员 B 根据程序 A 编写程序实现接口;

  新建一个  CallBack.java ,并添加如下代码;

public interface CallBack{
    void print(int x);
}

第三步

  第三是定义程序员 B 写的程序 b;

  新建一个  B.java ,并添加如下代码;

复制代码
public class B implements CallBack{

    @Override
    public void print(int x) {
        // TODO Auto-generated method stub
        System.out.println("回调,输出的 x = "+x);
    }
    
}
复制代码

万法归宗

  新建一个  Test.java ,并添加如下代码;

public class Test {

    public static void main(String[] args) {
        A a = new A();
        a.setCallBack(new B());
        a.call();
    }
}

运行结果

  

•万变不离其宗

  在测试方法中可以直接使用匿名内部类,省去  B.java  的创建;

  在新包下新建一个  Test.java ,添加如下代码;

复制代码
public class Test {

    public static void main(String[] args) {
        
        A a = new A();
        
        a.setCallBack(new CallBack() {
            public void print(int x) {
                System.out.println("通过匿名内部类回调,输出的 x = "+x);
            }
        });
        
        a.call();
        
    }
}

class A {
    CallBack callBack;
    
    void setCallBack(CallBack callBack) {
        this.callBack = callBack;
    }
    
    void call() {
        callBack.print(10);
    }
}

interface CallBack{
    void print(int x);
}
复制代码

运行结果

  

  或者你也可以这么写:

复制代码
public class Test {

    public static void main(String[] args) {
        
        A a = new A();
        
        CallBack callBack = new CallBack() {
            public void print(int x) {
                System.out.println("通过匿名内部类回调,输出的 x = "+x);
            }
        };
        a.setCallBack(callBack);
        
        a.call();
        
    }
}

class A {
    CallBack callBack;
    
    void setCallBack(CallBack callBack) {
        this.callBack = callBack;
    }
    
    void call() {
        callBack.print(10);
    }
}

interface CallBack{
    void print(int x);
}
复制代码

  作用都是一样的;

•班门弄斧

  参考资料:【回调函数透彻理解Java

 

posted @   MElephant  阅读(105)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示