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("一个问题");
    }

}
相关文章
相关标签/搜索