Java回調機制

回調:就是A類中調用B類中的某個方法C,而後B類中反過來調用A類中的方法D,D這個方法就叫回調方法,比較經典的回調方式:異步

  • class A實現接口CallBack callback,重寫其中的某個方法D—— 背景1
  • class A中包含一個class B的引用b —— 背景2
  • class B有一個參數爲callback的方法f(CallBack callback) —— 背景3
  • A的對象a調用B的方法 f(CallBack callback) —— A類調用B類的某個方法 C
  • 而後b就能夠在f(CallBack callback)方法中調用A的方法 —— B類調用A類重寫的接口中的方法D

下面經過例子來實異步回調機制。ide

首先創建一個接口測試

public interface Callback {
    
    public void solve(String msg);
}

class A實現接口CallBackthis

public class A implements Callback {
    
    private B b;//引用B的對象
    
    public A (B b) {
        this.b = b;
    }

    //經過這個方法問B問題
    public void ask(String question) {
        //這裏用一個線程來表示異步
        new Thread(new Runnable() {
            @Override
            public void run() {
                //A調用B中的方法,在這裏註冊回調接口 
                b.answerQuestion(A.this, question);
            }
        }).start(); 
    }

    //這裏A能夠作一些其餘的事情

    //B知道答案後調用此方法告訴A,就是A的回調方法 
    @Override
    public void solve(String s) {
        System.out.println("答案是:" + s);
    }
    
}

創建class B線程

public class B {

    public void answerQuestion(call_back cb, String s){
        System.out.println("A 的請求是:" + s);
    
        try {
            Thread.sleep(1000);
            //作一些事情
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    
        String result = "這個";
        //調用A中的方法,即B類反過來調用A的方法D
        cb.solve(result);
    }
}

新建一個測試類code

public class Test {

    public static void main(String[] args) {
    
        B b = new B();
        A a = new A(b);
        
        a.ask("一個問題");
    }

}
相關文章
相關標籤/搜索