当前位置:首页 > Java

java 回调如何实现

2026-03-18 16:01:15Java

回调机制的基本概念

回调是一种编程模式,允许在某个操作完成后通过函数通知调用方。Java 中通常通过接口或函数式接口实现回调,将函数作为参数传递并在特定事件触发时调用。

使用接口实现回调

定义一个回调接口,具体类实现该接口并重写回调方法。调用方持有接口引用,在适当时机触发回调。

// 1. 定义回调接口  
interface Callback {
    void onComplete(String result);
}

// 2. 实现回调接口  
class Worker {
    void doWork(Callback callback) {
        // 模拟耗时操作  
        String result = "Task Done";
        callback.onComplete(result); // 触发回调  
    }
}

// 3. 调用方使用回调  
public class Main {
    public static void main(String[] args) {
        Worker worker = new Worker();
        worker.doWork(new Callback() {
            @Override
            public void onComplete(String result) {
                System.out.println("Callback received: " + result);
            }
        });
    }
}

使用函数式接口(Java 8+)

通过 ConsumerFunction 等函数式接口简化回调实现,结合 Lambda 表达式减少样板代码。

import java.util.function.Consumer;

class AsyncTask {
    void execute(Consumer<String> callback) {
        String data = "Processed Data";
        callback.accept(data); // 触发回调  
    }
}

public class Main {
    public static void main(String[] args) {
        AsyncTask task = new AsyncTask();
        task.execute(result -> System.out.println("Result: " + result));
    }
}

异步回调示例

结合多线程实现异步回调,避免阻塞主线程。

java 回调如何实现

class AsyncWorker {
    void startWork(Callback callback) {
        new Thread(() -> {
            try {
                Thread.sleep(1000); // 模拟耗时  
                callback.onComplete("Async Task Complete");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

public class Main {
    public static void main(String[] args) {
        AsyncWorker worker = new AsyncWorker();
        worker.startWork(result -> System.out.println(result));
        System.out.println("Main thread continues...");
    }
}

实际应用场景

  • 事件监听:GUI 开发中的按钮点击事件。
  • 异步任务:网络请求完成后更新 UI。
  • 插件扩展:框架通过回调允许用户自定义逻辑。

通过接口或 Lambda 表达式,Java 回调机制能灵活解耦调用方与被调用方,适用于多种异步和事件驱动场景。

分享给朋友:

相关文章

权限管理vue如何实现

权限管理vue如何实现

基于路由的权限控制 在Vue中可以通过路由守卫实现页面级权限控制。定义路由时添加meta字段标记权限角色: const routes = [ { path: '/admin',…

java如何实现多线程

java如何实现多线程

实现多线程的方法 在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。此外,还可以使用ExecutorService等高级工具类来管理线程。 继承Thread类 通…

react如何实现录音

react如何实现录音

使用React实现录音功能 在React中实现录音功能通常需要借助浏览器的MediaRecorder API。以下是实现步骤: 获取用户麦克风权限 需要请求用户授权访问麦克风设备,使用navigat…

vue如何实现图

vue如何实现图

Vue 实现图表的方法 Vue 中实现图表可以通过多种方式,常见的有使用第三方库或自定义实现。以下是几种常见的方法: 使用 ECharts ECharts 是一个功能强大的图表库,支持多种图表类型。…

java如何实现分布式

java如何实现分布式

分布式系统实现方式 Java实现分布式系统通常涉及多种技术和框架,以下是几种核心方法: 基于RPC框架 使用Dubbo、gRPC等RPC框架实现服务间的远程调用。Dubbo提供高性能的RPC通信,支…

vue如何实现绑定

vue如何实现绑定

数据绑定基础 Vue 通过 v-bind 指令实现动态绑定 HTML 属性或组件 prop。基本语法为 v-bind:属性名="表达式",简写为 :属性名="表达式"。例如绑定 class 或 sty…