Java中如何实现回调函数机制?

2026-06-10 08:231阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计776个文字,预计阅读时间需要4分钟。

Java中如何实现回调函数机制?

回调和核心是回调方式将自身递归传递给调用方,这样调用方可以进一步调用。这种调用方式允许在调用结束后通知调用方所需的信息。

一般而言,项目开发过程中存在以下三种模块间调用方式:

1.同步调用

2.异步调用

3.类似回调的调用


回调的核心就是回调方将自己本身传递给调用方,这样调用方可以再调用结束以后告诉回调方它需要的
信息。​

一般来说项目开发过程中存在下面三种模块间调用方式

1 同步调用
类A方法a()调用类B方法b(),a()必须等待b()执行完毕才能继续执行。如果b()一直阻塞或者执行时间长
的话,a()后面的流程也会造成相应阻塞。

2 异步调用
为了处理上面的异常情况,类A的方法a()可以通过新建一个线程来调用b(),这样b()的执行时间就不会
对a()产生影响。但是如果a()需要用到b()的返回结果时,必须通过一定方法对b()的返回结果进行监听
。我们这里不讨论这种情况。

3 回调
接上面,我们可以考虑b()执行完毕后主动调用类A的callback()方法,这就是回调。

示例:类classA的ask()调用类ClassB的answerQues(),answerQues()中执行完毕后,主动调用callback
()方法answer()返回classA。

Callback.java

public interface Callback {

public void answer(String name);

}

ClassA.java

public class ClassA implements Callback

private ClassB classB;

public ClassA(ClassB classB) {
this.classB = classB;
}

public ClassB getClassB() {
return classB;
}

public void setClassB(ClassB classB) {
this.classB = classB;
}

public void ask(){
new Thread(new Runnable(){
@Override
public void run() {
classB.answerQues(ClassA.this);
}
}).start();

//去做其他事
doOtherThing();
}

public void doOtherThing(){
System.out.println("A做其他事情!");
}

@Override
public void answer(String name) {
System.out.println("答案是:"+name);

}
}

ClassB.java

public interface ClassB {

public void answerQues(Callback callback);
}

ClassBImpl.java

public class ClassBImpl implements ClassB

@Override
public void answerQues(Callback callback) {
try {
System.out.println("B做其他事情!");
//假装在做其他事
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}


//!!!回调
callback.answer("100");
}

}

CallbackTest.java

public static void main(String[] args) {

ClassB classB = new ClassBImpl();
ClassA classA = new

执行结果:

A做其他事情!
B做其他事情!
答案是:100

有两个优点:1 对classA抽象化,对于classB来说,不需要关心classA的具体实现。2 对于classB抽象
化,classA不需要关心classB的具体实现。即classA和classB中间出现一个池,classA放入东西,
classB取出东西,classB执行完成后调用classA,继续后面工作。

回调的核心就是回调方将自己本身传递给调用方,这样调用方可以再调用结束以后告诉回调方它需要的
信息。


Java中如何实现回调函数机制?

本文共计776个文字,预计阅读时间需要4分钟。

Java中如何实现回调函数机制?

回调和核心是回调方式将自身递归传递给调用方,这样调用方可以进一步调用。这种调用方式允许在调用结束后通知调用方所需的信息。

一般而言,项目开发过程中存在以下三种模块间调用方式:

1.同步调用

2.异步调用

3.类似回调的调用


回调的核心就是回调方将自己本身传递给调用方,这样调用方可以再调用结束以后告诉回调方它需要的
信息。​

一般来说项目开发过程中存在下面三种模块间调用方式

1 同步调用
类A方法a()调用类B方法b(),a()必须等待b()执行完毕才能继续执行。如果b()一直阻塞或者执行时间长
的话,a()后面的流程也会造成相应阻塞。

2 异步调用
为了处理上面的异常情况,类A的方法a()可以通过新建一个线程来调用b(),这样b()的执行时间就不会
对a()产生影响。但是如果a()需要用到b()的返回结果时,必须通过一定方法对b()的返回结果进行监听
。我们这里不讨论这种情况。

3 回调
接上面,我们可以考虑b()执行完毕后主动调用类A的callback()方法,这就是回调。

示例:类classA的ask()调用类ClassB的answerQues(),answerQues()中执行完毕后,主动调用callback
()方法answer()返回classA。

Callback.java

public interface Callback {

public void answer(String name);

}

ClassA.java

public class ClassA implements Callback

private ClassB classB;

public ClassA(ClassB classB) {
this.classB = classB;
}

public ClassB getClassB() {
return classB;
}

public void setClassB(ClassB classB) {
this.classB = classB;
}

public void ask(){
new Thread(new Runnable(){
@Override
public void run() {
classB.answerQues(ClassA.this);
}
}).start();

//去做其他事
doOtherThing();
}

public void doOtherThing(){
System.out.println("A做其他事情!");
}

@Override
public void answer(String name) {
System.out.println("答案是:"+name);

}
}

ClassB.java

public interface ClassB {

public void answerQues(Callback callback);
}

ClassBImpl.java

public class ClassBImpl implements ClassB

@Override
public void answerQues(Callback callback) {
try {
System.out.println("B做其他事情!");
//假装在做其他事
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}


//!!!回调
callback.answer("100");
}

}

CallbackTest.java

public static void main(String[] args) {

ClassB classB = new ClassBImpl();
ClassA classA = new

执行结果:

A做其他事情!
B做其他事情!
答案是:100

有两个优点:1 对classA抽象化,对于classB来说,不需要关心classA的具体实现。2 对于classB抽象
化,classA不需要关心classB的具体实现。即classA和classB中间出现一个池,classA放入东西,
classB取出东西,classB执行完成后调用classA,继续后面工作。

回调的核心就是回调方将自己本身传递给调用方,这样调用方可以再调用结束以后告诉回调方它需要的
信息。


Java中如何实现回调函数机制?