java回調方法之理解

來源:互聯網
上載者:User

標籤:

  以前經常看見"回調方法(或回呼函數)"一詞,但是沒有瞭解過是什麼意思,更不知道用法。現在從網路上搜集了一些很好的資料,自己又整理一下,作為自己的筆記,也作為學習過程中的一個小腳印。(這篇筆記大部分來自他人的總結,提問,回答等,特此聲明)

  下面從1.什麼是回呼函數?2.回呼函數的作用?3.回呼函數的具體實現?(通過執行個體解決)三個方面進行闡述:

一. 什麼是回呼函數?

  1. 維基百科定義(看完本片文章再來理解):在電腦程式設計中,回呼函數(簡稱回調),是指通過函數參數傳遞到其他代碼的,某一塊可執行代碼引用。這一設計允許底層代碼調用在高層定義的子程式

  2. 其他定義(易於理解,推薦):所謂的回調,就是程序員A寫了一段程式(程式a),其中預留有回呼函數介面,並封裝好了該程式。程式員B要讓a調用自己的程式b中的一個方法,於是,他通過a中的介面回調自己b中的方法。(常式看第三部分)

  3. 回調的核心:把一段程式作為成員變數,在特定場合使用該段程式。(這種成員變數在java中是通過介面實現的)

 

二. 回呼函數的作用?

  回調方法是把功能定義和功能實現分離的一種手段,是一種松耦合的設計思想。(該部分目前先這樣理解,待補充)

 

三. 回呼函數的具體實現?

  在Java裡面,我們使用介面來實現回調。

  下面是例子:

  1.首先定義一個類Caller,按照上面的定義就是程式員A寫的程式a,這個類裡面儲存一個介面引用。 

public class Caller {    private MyCallInterface callInterface;        public Caller() {
}
public void setCallFunc(MyCallInterface callInterface) { this.callInterface = callInterface; } public void call() { callInterface.printName(); }}

   對以上代碼中setCallFunc()方法的解釋:回調就是把代碼作為對象傳進去,那麼怎麼把代碼傳進去呢,當然需要做成一個類,類中的某個方法就是這段代碼。那麼對於調用者來說就有兩點,一個是怎麼得到這個類,一個是怎麼知道是什麼方法。對於第一點,就是你看到的set方法,將外部類作為屬性送進來。至於第二點,就需要定義一個介面,然後調用介面中定義的方法就行。

  2. 當然需要介面的定義,為了方便程序員B根據我的定義編寫程式實現介面。

public interface MyCallInterface {    public void  printName();}

  

  3.第三是定義程式員B寫的程式b。 

public class Client implements MyCallInterface {    @Override    public void printName() {        System.out.println("This is the client printName method");    }}

  

  4. 測試如下

public class Test {    public static void main(String[] args) {        Caller caller = new Caller();        caller.setCallFunc(new Client());        caller.call();    }}

  看到這裡應該明白什麼是回調了,有些文章介紹的很好,但是剛開始沒看明白,是因為把第3步的類省略,直接寫成匿名類了。  

  5. 在測試方法中直接使用匿名類,省去第3步。

public class Test {    public static void main(String[] args) {        Caller caller = new Caller();//        caller.setCallFunc(new Client());        caller.setCallFunc(new MyCallInterface() {            public void printName() {                System.out.println("This is the client printName method");            }        });        caller.call();    }}

 

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.