Java--回調介面

來源:互聯網
上載者:User

標籤:構造方法   構造   解決問題   int   ati   開啟   result   問題   通訊   

回調介面:

  我們都知道,一個線程在運行中,遇到一個耗時操作(方法)時,會開啟另外一個線程,即所謂 -- 非同步 。java中 回調介面 也必然應用與非同步載入。 所謂 回調介面 ,也就是線程運行中 遇到一個耗時操作(方法),開啟一個子線程,在子線程中將該操作(方法)交給

另外一個對象去完成。而被交付完成任務的對象,執行操作完畢之後,需要把資訊回傳給原對象。這種時候就必須使用 回調介面 技術。也就是網上流傳的方法,A 調用 B 的 c 方法(為了擷取 (所需要知道的) 資訊),B 再反過來調用 A 的 d 方法(為了傳達(A想要知道的)信

息)。而那個 d 方法 (也就是介面的實現方法) 被稱為 回調方法

  即實現回調方法的要素為:

    1、A 類 要將 B 類 作為它的成員變數,並且引用。(構造方法初始化時載入B)

    2、B 類需要定義一個介面,然後在 把資訊回傳給 A類 的方法中,把介面作為參數傳遞過去,然後實現介面的抽象方法,把 A 想知道的資訊傳入。

    3、A 在調用 上述(紅色)方法 時,必須實現該介面的方法。也就是 回調方法。完成通訊。  

 

代碼如下:

 

//小明類 --> 他有一個問題需要詢問老王。public class XiaoMing implements CallBack {    // 1、將老王類聲明為他的成員變數    LaoWang laoWang;    // 小明的構造方法,用來對老王的引用    public XiaoMing(LaoWang laoWang) {        this.laoWang = laoWang;    }    // 向老王問問題 (耗時操作)    public void askQuestion(String question) {        // 開啟線程        new Thread(new Runnable() {            @Override            public void run() {                // 調用老王的方法 來擷取答案。                laoWang.solve(XiaoMing.this, question);            }        }).start();                //問完問題,小明可以去幹其他的,也就是(非同步)        play();    }        public void play(){        System.out.println("我去玩耍了...");    }    // 回調方法  result --> 就是老王傳過來的答案    @Override    public void callback(String result) {        System.out.println(result);    }}

 

 

//老王類  --> 他有幫小明解決問題的能力(方法)public class LaoWang {    //這是解決問題的方法,必須要將介面作為你的參數傳遞過去    public void solve(CallBack callback,String question){                System.out.println("小明問的問題是--->"+ question);                //類比老王解決問題所花費的時間        try {            Thread.sleep(3000);        } catch (InterruptedException e) {            e.printStackTrace();        }                String result = "答案是2";                //把答案傳入介面的參數        callback.callback(result);    }        //當你解決完問題以後,必須要定義一個介面,來將你的答案回複給小明。    //否則小明無法接收你的答案。    public interface CallBack{        void callback(String result);    }}

 

//測試類別public class Test {        public static void main(String[] args) {                LaoWang laoWang = new LaoWang();                XiaoMing xiaoMing = new XiaoMing(laoWang);                //小明問的問題        xiaoMing.askQuestion("1+1=?");    }}

 

Java--回調介面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.