java中的回调(callback)机制简述

版权声明:本文为博主原创文章,转载请注明出处! https://blog.csdn.net/cgwang_1580/article/details/79592244

在java中,回调用的十分频繁;Android开发中,回调往往出现在相机的预览、采图中,这里我们来简单地说明一下回调的实现原理;

回调,顾名思义就是在调用之后返回调用。java回调方法简单的说就是:假设有两个类class A和class B,在B中调用A类的一个方法a1,而a1在执行时又调用了B类中的方法b1,则b1就称为回调函数。

java中,回调的实现一般与接口联系在一起一般有如下套路:

首先,定义一个接口”interface in”,其中有方法inFun;

然后,定义类”class B implements in”,并实现接口in中的方法inFun,且有方法funB;

接着,定义类”class A”,其中有方法funA,且funA的形参中有一个为接口in类型,该方法被B的方法funB调用,并在该方法中调用方法inFun,由于方法inFun在类B中实现,所以inFun即可以称为类B的回调函数;

最后,由主函数来调用类B中的方法funB,即可以实现回调。

以下为一个实例,新建一个Java项目:

1、定义接口:

public interface DoJob {    
    void fillBlank(int a, int b, int result);
}

其中,接口中有方法fillBlank,对应上述中的inFun;

2、定义类B

public class Student implements DoJob{

    private String name = null;
    public void setName(String theName) {
        name = theName;
    }
    public void callHelp(int a, int b, Student stu) {
        new Calculator().add(a, b, stu);
    }
    public void fillBlank(int a, int b, int result) {
        System.out.println(name + " please for help, " + "the result is " + a + "+" + b + "=" + result);
    }
}

其中,方法callHelp对应上述讲解中的funB,fillBlank为实现接口中的方法;

3、定义类A

public class Calculator {

    private String name = null;
    public void setName(String theName){    
        name = theName;
    }
    public void add(int a, int b, DoJob job ){  
        int result = a + b;
        job.fillBlank(a, b, result);
    }
}

其中,方法add即对应上述中的funA,在该方法中调用接口方法inFun,即fillBlank;

4、在主方法中实现回调

public class CallbackTest {

    public static void main(String[] args){     
        Student xiaoMing = new Student();   
        xiaoMing.setName("Xiao Ming");

        Calculator xiaoHong = new Calculator();
        xiaoHong.setName("Xiao Hong");

        int cal1 = 123;
        int cal2 = 1123;

        xiaoMing.callHelp(cal1, cal2, xiaoMing);
    }   
}

其中,方法的调用顺序为:callHelp → add → fillBlank(回调函数),从而实现java回调。

猜你喜欢

转载自blog.csdn.net/cgwang_1580/article/details/79592244