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

2018-10-16  本文已影响0人  小小的Jobs

转载自CNDS的cgwang_1580  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回调

---------------------

作者:cgwang_1580

来源:CSDN

原文:https://blog.csdn.net/cgwang_1580/article/details/79592244?utm_source=copy

上一篇 下一篇

猜你喜欢

热点阅读