歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java回調機制(CallBack)詳解

序言

最近學習Java,接觸到了回調機制(CallBack)。初識時感覺比較混亂,而且在網上搜索到的相關的講解,要麼一言帶過,要麼說的比較單純的像是給CallBack做了一個定義。當然了,我在理解了回調之後,再去看網上的各種講解,確實沒什麼問題。但是,對於初學的我來說,缺了一個循序漸進的過程。此處,將我對回調機制的個人理解,按照由淺到深的順序描述一下,如有不妥之處,望不吝賜教!

開始之前,先想象一個場景:幼稚園的小朋友剛剛學習了10以內的加法。

第1章. 故事的緣起

幼師在黑板上寫一個式子 “1 + 1 = ”,由小明同學來填空。

由於已經學習了10以內的加法,小明同學可以完全靠自己來計算這個題目,模擬該過程的代碼如下:

public class Student
{
    private String name = null;

    public Student(String name)
    {
        // TODO Auto-generated constructor stub
        this.name = name;
    }
   
    public void setName(String name)
    {
        this.name = name;
    }
   
    private int calcADD(int a, int b)
    {
        return a + b;
    }
   
    public void fillBlank(int a, int b)
    {
        int result = calcADD(a, b);
        System.out.println(name + "心算:" + a + " + " + b + " = " + result);
    }
}

小明同學在填空(fillBalnk)的時候,直接心算(clacADD)了一下,得出結果是2,並將結果寫在空格裡。測試代碼如下:

public class Test
{
    public static void main(String[] args)
    {
        int a = 1;
        int b = 1;
        Student s = new Student("小明");
        s.fillBlank(a, b);
    }
}

運行結果如下:

小明心算:1 + 1 = 2

該過程完全由Student類的實例對象單獨完成,並未涉及回調機制。

第2章. 幼師的找茬

課間,幼師突發奇想在黑板上寫了“168 + 291 = ”讓小明完成,然後回辦公室了。

花擦!為什麼所有老師都跟小明過不去啊?明明超綱了好不好!這時候小明同學明顯不能再像上面那樣靠心算來完成了,正在懵逼的時候,班上的小紅同學遞過來一個只能計算加法的計算器(奸商啊)!!!!而小明同學恰好知道怎麼用計算器,於是通過計算器計算得到結果並完成了填空。

計算器的代碼為:

public class Calculator
{
    public int add(int a, int b)
    {
        return a + b;
    }
}

修改Student類,添加使用計算器的方法:

public class Student
{
    private String name = null;

    public Student(String name)
    {
        // TODO Auto-generated constructor stub
        this.name = name;
    }
   
    public void setName(String name)
    {
        this.name = name;
    }
   
    @SuppressWarnings("unused")
    private int calcADD(int a, int b)
    {
        return a + b;
    }
   
    private int useCalculator(int a, int b)
    {
        return new Calculator().add(a, b);
    }
   
    public void fillBlank(int a, int b)
    {
        int result = useCalculator(a, b);
        System.out.println(name + "使用計算器:" + a + " + " + b + " = " + result);
    }
}

測試代碼如下:

public class Test
{
    public static void main(String[] args)
    {
        int a = 168;
        int b = 291;
        Student s = new Student("小明");
        s.fillBlank(a, b);
    }
}

該過程中仍未涉及到回調機制,但是部分小明的部分工作已經實現了轉移,由計算器來協助實現。

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2016-04/130042p2.htm

Copyright © Linux教程網 All Rights Reserved