国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java 基礎(chǔ)復(fù)習(xí)實踐 --- CallBack

shadowbook / 1823人閱讀

摘要:很早之前不知道如何解釋清楚回調(diào)函數(shù),在知乎上看到一個回答特別形象,當(dāng)時就收藏了,所以今天決定用代碼的形式再讓這個回答更加深刻點。

很早之前不知道如何解釋清楚回調(diào)函數(shù)(CallBack),在知乎上看到一個回答特別形象,當(dāng)時就收藏了,所以今天決定用代碼的形式再讓這個回答更加深刻點。

知乎-回調(diào)函數(shù)(callback)是什么?

然后再看看 Android 里的應(yīng)用。

什么是回調(diào)函數(shù)

Android 里常見的回調(diào)

什么是回調(diào)函數(shù)

維基的解釋:

在計算機(jī)程序設(shè)計中,回調(diào)函數(shù),或簡稱回調(diào)(Callback 即call then back 被主函數(shù)調(diào)用運算后會返回主函數(shù)),是指通過函數(shù)參數(shù)傳遞到其它代碼的,某一塊可執(zhí)行代碼的引用。這一設(shè)計允許了底層代碼調(diào)用在高層定義的子程序。

我認(rèn)為通俗易懂的解釋:

你到一個商店買東西,剛好你要的東西沒有貨,于是你在店員那里留下了你的電話,過了幾天店里有貨了,店員就打了你的電話,然后你接到電話后就到店里去取了貨。在這個例子里,你的電話號碼就叫回調(diào)函數(shù),你把電話留給店員就叫登記回調(diào)函數(shù),店里后來有貨了叫做觸發(fā)了回調(diào)關(guān)聯(lián)的事件,店員給你打電話叫做調(diào)用回調(diào)函數(shù),你到店里去取貨叫做響應(yīng)回調(diào)事件。回答完畢。

可能看著通俗的解釋能夠知道是怎么回事,但是輪到自己要去實現(xiàn)一個回調(diào)的時候,就有點寸步難行了。所以我簡單將那個解釋,轉(zhuǎn)換成了代碼再解釋一番。

首先我得定義一個接口(我的電話號碼):

public interface INumber {
    public void onCall();
}

我去商店買東西,該商店對象剛剛初始化:

Store store = new Store();

然后我才得知商店剛剛開門沒有我要的貨(商店構(gòu)造函數(shù)):

public class Store {
    public Store() {
        Utils.sout("才開店,沒有貨");
        Utils.sout("=============");
    }
}

所以我把我的電話號碼留給店員,對于店員來說就是得到我的電話號碼(注冊事件):

private INumber number;

public void setNumber(INumber number) {
    this.number = number;
}

public void call() {
    number.onCall();
}
/**************注冊前的準(zhǔn)備工作完畢**************/
public static void main(String[] args) {
    Store store = new Store();
    // 先注冊好事件
    store.setNumber(new INumber() {
        @Override
        public void onCall() {
            Utils.sout("=============");
            Utils.sout("貨到了");
        }
    });
    for (int i = 1; i < 4; i++) {
        Utils.sout("模擬取貨:" + i + "小時");
    }
    // 貨到了就打電話通知我
    store.call();
}

整體控制臺輸出:

才開店,沒有貨

= = = = = = = = = = = = =
模擬取貨:1小時
模擬取貨:2小時
模擬取貨:3小時
= = = = = = = = = = = = =
貨到了

-
商店類的完整代碼:

public class Store {

    public Store() {
        Utils.sout("才開店,沒有貨");
        Utils.sout("=============");
    }

    private INumber number;

    public void setNumber(INumber number) {
        this.number = number;
    }

    public void call() {
        number.onCall();
    }

    public static void main(String[] args) {

        Store store = new Store();

        store.setNumber(new INumber() {
            @Override
            public void onCall() {
                Utils.sout("=============");
                Utils.sout("貨到了");
            }
        });

        for (int i = 1; i < 4; i++) {
            Utils.sout("模擬取貨:" + i + "小時");
        }

        store.call();
    }

}
Android 里常見的回調(diào)

我們經(jīng)常這樣寫:

btShowDialog = (Button) findViewById(R.id.bt_showdialog);
btShowDialog.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // do something
    }
});

我們經(jīng)常可以看到這樣類似的代碼,監(jiān)聽一個按鈕的點擊事件,當(dāng)用戶點擊之后,我們執(zhí)行一些邏輯。

這里的 setOnClickListener() 就跟我們之前店員獲得我的電話號碼的方法一樣 setNumber() 注冊好事件。
源碼:

/**
 * Register a callback to be invoked when this view is clicked. If this view is not
 * clickable, it becomes clickable.
 *
 * @param l The callback that will run
 *
 * @see #setClickable(boolean)
 */
public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}

/**
 * Interface definition for a callback to be invoked when a view is clicked.
 */
public interface OnClickListener {
    /**
     * Called when a view has been clicked.
     *
     * @param v The view that was clicked.
     */
    void onClick(View v);
}

到這里的時候是不是就很清晰了呢?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65058.html

相關(guān)文章

  • Part1程序設(shè)計基礎(chǔ)Java語言程序設(shè)計(10th))

    摘要:緣起這是語言程序設(shè)計的,計劃之前全部整理完。產(chǎn)生隨機(jī)數(shù)的方法。復(fù)習(xí)題雙分支語句復(fù)習(xí)題嵌套的語句和多分支語句復(fù)習(xí)題常見錯誤和陷阱常見錯誤兩個浮點數(shù)值的相等測試復(fù)習(xí)題產(chǎn)生隨機(jī)數(shù)產(chǎn)生一個到之間的隨機(jī)值,不包括。 緣起 這是《Java語言程序設(shè)計(10th)》的Part1,計劃2017-12-31之前全部整理完。 2017-12-23開始想看這本書的,并同時開始實踐起Java來的。 Part...

    BDEEFE 評論0 收藏0
  • js css 基礎(chǔ)知識點和面試題復(fù)習(xí)

    摘要:兩種元素必須擁有相同的父元素,但是不必直接緊隨。臨時移動重定向未修改訪問緩存數(shù)據(jù)客戶端錯誤,請求包含語法錯誤或無法完成請求身份為認(rèn)證服務(wù)器錯誤,服務(wù)器在處理請求的過程中發(fā)生了錯誤服務(wù)器內(nèi)部錯誤持續(xù)更新 對平常的小知識點,會持續(xù)更新 == 對比 特殊原則 undefined == null / null == undefined number 和 string/boolean 對比將...

    yeooo 評論0 收藏0
  • 跳槽季如何快速全面復(fù)習(xí)面試題

    摘要:排序算法和集合工具類排序算法和集合工具類。面試官總是問排序算法也不是在難為你,而是在考察你的編程功底。你首先要理解多線程不僅僅是和那么簡單,整個并發(fā)包下面的工具都是在為多線程服務(wù)。 去年的這個時候樓主通過兩個月的復(fù)習(xí)拿到了阿里巴巴的 offer,有一些運氣,也有一些心得,借著跳槽季來臨特此分享出來。簡單梳理一下我的復(fù)習(xí)思路,同時也希望和大家一起交流討論,一起學(xué)習(xí),如果不對之處歡迎指正一...

    keke 評論0 收藏0
  • 我的2016年Java書單

    摘要:相對于電子書,我更喜歡紙質(zhì)版的書籍。過去的年一共閱讀過本技術(shù)書,下面對這些書做一個小結(jié)。源碼深度解析這本書是年購買的,年是第四次閱讀。必知必會數(shù)據(jù)庫的復(fù)習(xí)書籍,內(nèi)容淺顯易懂。 相對于電子書,我更喜歡紙質(zhì)版的書籍。我喜歡在拿到新書時記錄購買時間、地點、開始閱讀的時間、第一次看完的時間,算是一種學(xué)習(xí)的記錄。過去的2016年一共閱讀過15本技術(shù)書,下面對這些書做一個小結(jié)。 《深入理解Java...

    Scholer 評論0 收藏0
  • Java 學(xué)習(xí)路線之四個階段

    摘要:寫這篇總結(jié),主要是記錄下自己的學(xué)習(xí)經(jīng)歷,算是自己對知識的一個回顧。這個階段學(xué)習(xí)的時候,要學(xué)會使用開發(fā)工具,比如或者來學(xué)習(xí)。這個階段需要自己對自己有很強的自律去學(xué)習(xí),不要看了一半就放棄了。 showImg(https://segmentfault.com/img/bVbaNtw?w=1232&h=822); 寫這篇總結(jié),主要是記錄下自己的學(xué)習(xí)經(jīng)歷,算是自己對知識的一個回顧。也給想要學(xué)習(xí) ...

    fredshare 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<