簡單理解回撥

飄過的小熊發表於2016-09-02

簡單理解回撥

標籤(空格分隔): java


雖然以前也是看過很多回撥方面的例子,甚至是跟著步驟把程式碼寫了一遍,然而後面遇到了回撥方法還是理解不到,運用不來。

紙上得來終覺淺,覺知此事要躬行

於是找到以前看過的博文,不看程式碼。看文字描述自己弄了一下,應該算是大徹大悟了。這篇博文是百度回撥的第一篇。致謝。
一個經典的例子讓你徹徹底底的理解java回撥機制

我覺得關鍵是實現過程:

  • 背景一:類A要實現一個介面,這個介面中的方法就是回撥方法
  • 背景二:類A持有類B的一個引用(反正類A中要出現類B的物件)
  • 背景三:類B中要有一個以介面為引數的方法
  • 大結局:在A類或者在任何想要實現回撥的場景中使用B的物件呼叫B中以介面為引數的方法,這個引數就傳入A的物件的例項,於是就可以在這個方法中使用A的物件來呼叫A中的方法(大結局有點混亂)

情景模擬: 我是一個老師類的物件,於是我就是千萬個老師之一,這裡的老師類就是類A。老師有很多的學生,於是就再建立一個學生類。我讓學生去交學費,交了就通知我(交學費只是簡單的一種,還有其他很多種耗時的操作)。好的,新建一個學生物件。但是交完錢怎麼通知我尼,我留下一個聯絡方式,就是老師類都有一個聯絡方式,實現了一個介面。而學生就得有通訊工具,那就是以老師類介面為引數的一個方法。當然在使用的時候要傳入我的引用。

A.java

public class A implements Callback {

    private B b;

    public A(B b) {
        // TODO Auto-generated constructor stub
        this.b = b;
    }

    public void g() {
        // TODO Auto-generated method stub
        System.out.println("I kown!");
    }

    public static void main(String[] args) {
        A a = new A(new B());
        a.b.f(a);
    }

}

B.java


public class B {
    void f(Callback callback) {
        callback.g();
    }
}

Callback.java


public interface Callback {
    void g();
}

博主還說到安卓中的button的點選回撥:確實是經典

相關文章