当前位置 : 主页 > 编程语言 > java >

Java回调机制

来源:互联网 收集:自由互联 发布时间:2022-08-10
回调的核心就是回调方将自己本身传递给调用方,这样调用方可以再调用结束以后告诉回调方它需要的 信息。​ 一般来说项目开发过程中存在下面三种模块间调用方式 1 同步调用 类


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

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

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里面String字符串和其他类型转换
下一篇:没有了
网友评论