资讯动态

别再被Java回调绕晕了!搞懂它,代码直接起飞

发布时间:2026/8/10 10:39:36 来源:尧图企业网站定制
1. 什么是回调函数所谓回调函数, 用以回调的函数是也按其名思义。仅为一功能片段之回调函数, 乃由用户依回调函数调用约定而实现之函数也。身为工作流一部分的回调函数, 由工作流决定函数之调用回调时机。其包含以下几个特性:(1)属于工作流的一个部分(2)必须按照工作流指定的调用约定来申明定义(3)其调用的时机是由工作流予以决定的, 回调函数的实现者不可以直接借用调用回调函数去达成工作流的功能。2. 回调机制所谓回调机制, 乃是一种常见的设计模式, 其将工作流中间的某一数据处理逻辑, 依据约定的接口, 向外部使用者予以暴露, 为外部使用者供给数据, 或者要求外部使用者提供数据。正如电脑之上的USB接口那般, 无论插入何种U盘均可, 能够从电脑里面Copy数据, 同时也能够将数据Copy至电脑之中。3.java的回调机制软件模块彼此之间始终是有着一定的接口的, 依据调用方式而言, 能够将它们划分作三类分别是: 同步调用, 回调以及异步调用。同步调用, 属于一种阻塞式调用, 做调用的一方, 得等待对方执行完毕以后, 才能够返回 , 它是一种单向调用。回调, 它是一种双向调用模式, 这意味着, 当接口被调用的时候, 被调用的那一方, 也会去调用对方的接口。异步调用, 是类似于消息或者事件的一种机制, 然而其调用方向恰好相反, 当接口的服务接收到某种讯息时, 或者发生某种事件之时, 会主动去通知客户方, 也就是去调用客户方的接口。使用回调达成异步消息的注册, 借助异步调用达成消息的通知, 回调与异步调用的关系紧密至极。4.回调的java例子例1public class CallbackExample { public static void main(String[] args) { FooBar fooBar new FooBar(); fooBar.setCallback(new ICallback() { public void postExec() { System.out.println(在CallbackExample类中实现但不能被CallbackExample的对象调用而由FooBar对象调用); } }); } } interface ICallback { //需要回调的方法 public void postExec(); } class FooBar { private ICallback callback; public void setCallback(ICallback callback) { this.callback callback; doSth(); } public void doSth() { callback.postExec(); } }class CallbackExample { public static void main(String[] args) { FooBar fooBar new FooBar(); fooBar.setCallback(new ICallback() { public void postExec() { System.out.println(在CallbackExample类中实现但不能被CallbackExample的对象调用而由FooBar对象调用); } }); } } interface ICallback { //需要回调的方法 public void postExec(); } class FooBar { private ICallback callback; public void setCallback(ICallback callback) { this.callback callback; doSth(); } public void doSth() { callback.postExec(); } }例2public class CallbackFetcherExample { public static void main(String[] args) { new Worker().doWork(); } } interface FetchCallback { void onData(Data data); void onError(Throwable cause); } interface Fetcher { void fetchData(FetchCallback callback); } class Worker { Data data new Data(); public void doWork() { Fetcher fetcher new Fetcher() { public void fetchData(FetchCallback callback) { System.out.println(start fetch data...); callback.onData(data); } }; fetcher.fetchData(new FetchCallback() { public void onData(Data data) { // call if data is fetched without error System.out.println(Data received: data); } public void onError(Throwable cause) { //call if error is received during fetch System.err.println(An error accour: cause.getMessage()); } }); } } class Data { }class CallbackFetcherExample { public static void main(String[] args) { new Worker().doWork(); } } interface FetchCallback { void onData(Data data); void onError(Throwable cause); } interface Fetcher { void fetchData(FetchCallback callback); } class Worker { Data data new Data(); public void doWork() { Fetcher fetcher new Fetcher() { public void fetchData(FetchCallback callback) { System.out.println(start fetch data...); callback.onData(data); } }; fetcher.fetchData(new FetchCallback() { public void onData(Data data) { // call if data is fetched without error System.out.println(Data received: data); } public void onError(Throwable cause) { //call if error is received during fetch System.err.println(An error accour: cause.getMessage()); } }); } } class Data { }观察者模式与回调机制的关系观察者模式, 是在对象之间去定义一种一对多的依赖关系, 如此这般, 一旦有一个对象发生了状态的改变, 那么那些依赖于它的对象, 就都会接收到通知, 并且会自动地进行更新。以上篇相关的关于java回调机制以及其实现的博文作为例子, 在例1当中, 可以把被当作一个主题也就是被观察者的实现对象, 当作观察者, 在进行调用的时候, 通知的那个能够改变状态的()方法, 当然了, 这体现的是一对一的依赖关系。所以, 我们能够将回调机制视作观察者模式的一种特殊类别, 也就是说, 这种情况下仅有一个观察者。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价