在java中是存在回调函数的,我们可以把回调函数理解为一个被作为参数传递的函数。
类似于,我可以设置一个功能给系统,但是只有特定时候才会触发,触发的时候就会把函数作为参数的形式传递到另外的函数中。一般都是使用系统中写好的接口功能时使用。
下面是一个实现过程
实现方法方法一:
类A
public class A implements Callback {
public void a(){
System.out.println("这是A类的a方法");
B b=new B();
b.b(this);
System.out.println("A类"+this);
}
@Override
public void callback(){
System.out.println("回调函数");
}
}
类B
public class B {
public void b(Callback callback){
System.out.println("这是类B的b方法");
callback.callback();
System.out.println("B类"+this);
}
}
回调函数接口:
public interface Callback {
void callback();
}
客户端:
public class Client {
public static void main(String[] args) {
A a=new A();
a.a();
}
}
结果:
可以看到,其实就是将回调接口的实现类传入到了参数中,也会实现实现类的初始化过程,然后在在调用者方使用实现类这个对象调用回调函数
而我们一般都会使用第二种方法,就是匿名内部类的方法
方案二:匿名内部类
这是一个使用zookeeper接口的inBackground的功能,这个时候需要一个回调函数接口的对象,于是便使用此种方式
回调函数优点
反正就是,什么内部类、接口、抽象类,都是为了灵活、解耦合,一个意思
灵活性
使用回调函数可以在不改变原始函数的情况下,通过传递不同的函数来实现不同的行为,从而使代码更加灵活和可扩展。(意思就是可以传入不同回调函数的实现类,是的代码更加灵活)
解耦性
通过将回调函数定义在接口中,实现了调用方和回调方之间的解耦。调用方只需要关注接口的定义,而不需要关心具体的回调逻辑,从而降低了代码的耦合度。(通过接口既可以看出参数在被调用函数中作用)
异步处理
回调函数常常用于处理异步操作,如网络请求、文件 I/O 等。通过使用回调函数,可以在异步操作完成时得到通知并处理相应的结果,从而避免阻塞主线程,提高程序的性能和响应性。
代码复用
通过定义接口和实现不同的回调类,可以在多个地方重复使用相同的回调逻辑,从而实现代码的复用。