最簡單清晰的理解Java回調機制

來源:互聯網
上載者:User

用一個例子就很容易說清楚回調的意思和機制,重要的是注意所謂的“回”是什麼意思

 

回調是基於介面或抽象類別的,先樣本一個需要回調的介面:

package gss.callback;</p><p>/**<br /> * 儲存回調方法的介面<br /> * @author gss<br /> *<br /> */<br />public interface Icallback {<br />public int doCallbackMethod(int a,int b) ;<br />}<br />

 

 

然後是支援回調的類:

package gss.callback;</p><p>/**<br /> * 回調類<br /> * @author gss<br /> *<br /> */<br />public class BackCaller {<br />public Icallback call;<br />private int p1;<br />private int p2=10;</p><p>public int getP1() {<br />return p1;<br />}</p><p>public void setP1(int p1) {<br />this.p1 = p1;<br />}</p><p>public int getP2() {<br />return p2;<br />}</p><p>public void setP2(int p2) {<br />this.p2 = p2;<br />}</p><p>public void setCall(Icallback call) {<br />this.call = call;<br />}</p><p>public void execute() {<br />System.out.println("回調類執行!");<br />//在回調類中執行回調方法,這個方法裡執行什麼,由調度流程決定<br />//調度流程決定被調用者做什麼,這就是所謂回調的真意<br />if(call!=null) {<br />System.out.println("回調方法返回:"+call.doCallbackMethod(p1,p2));<br />}<br />}<br />}<br />

 

最後是調度流程:

package gss.callback;</p><p>/**<br /> * 這個類就是所謂的調用方,為了方便,用一個main方法實現<br /> * @author gss<br /> *<br /> */<br />public class Manager {</p><p>public static void main(String args[]) {<br />int param=100;</p><p>BackCaller c = new BackCaller();<br />c.setP1(param);</p><p>//這就是所謂的上層給下層用。<br />//一般而言,資源是從調用者傳給被調用者的,方法是被調用自己的,被調用者根據自己的方法使用調用者傳給的資源<br />//回調就剛好相反,是調用者決定方法的實現,"做什麼也由調用者提供",被呼叫者"回"調調用者指定的邏輯<br />//所以最方便的就是在調用流程裡使用匿名內部類<br />System.out.println("調度流程執行!");<br />c.setCall(new Icallback() {</p><p>public int doCallbackMethod(int a, int b) {<br />return a*b;<br />}</p><p>});<br />//被調用者在這裡可以"回"調用調用者指定的邏輯<br />c.execute();</p><p>c.setCall(new Icallback() {</p><p>public int doCallbackMethod(int a, int b) {<br />return a/b;<br />}</p><p>});<br />c.execute();<br />}<br />}<br />

 

最後是執行結果:可以看到執行乘法還是除法由調度流程決定

調度流程執行!<br />回調類執行!<br />回調方法返回:1000<br />回調類執行!<br />回調方法返回:10

 

 

總結一句話:

所謂的回調的典型表現就是——調用流程裡定義被調用者註冊的介面方法。被調用者就可以看作是“回”調了調用者。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.