標籤:構造方法 構造 解決問題 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--回調介面