ホームページ  >  記事  >  Java  >  コールバック機構の詳細なコード説明

コールバック機構の詳細なコード説明

Y2J
Y2Jオリジナル
2017-05-11 09:25:431416ブラウズ

この記事では、Java コールバック メカニズムの例の詳細な説明に関する関連情報を主に紹介します。必要な方は参照してください。コールバック メソッドとは何だろうと思いました。それでネットで調べたり調べたりしましたが、いろいろ調べてもよく分かりませんでしたが、いわゆるコールバックというもので、クラスAがクラスBのメソッドCを呼び出し、その後クラスBを呼び出すという意味です。このメソッド D は、こう見ると少しめまいを感じるかもしれません。実は、私も最初は理解できませんでした。より古典的なコールバック メソッドについて他の人が言ったことを読みました:

Class
A は

interface
    CallBack コールバックを実装します—
  • Background 1

    class A contains a referenceb of class B— —

    バックグラウンド 2
  • クラス B にはメソッド f(そのパラメーターはコールバック CallBack コールバック) があります ——バックグラウンド 3

  • A の objecta は B のメソッド f (CallBack コールバック) を呼び出します ——クラス Aクラス B の特定のメソッド C を呼び出します

  • 次に、 b は f に含めることができます (CallBack コールバック) メソッドで A を呼び出すメソッド - クラス B はクラス A の特定のメソッド D を呼び出します

  • 誰もが使用するのが好きです電話をかける例です。時代に合わせて、この例も使用します。私の例では、非同期コールバックを使用します
  • ある日、Xiao Wang は「1 + 1」という難しい問題に遭遇しました。 = ?" そこで彼はシャオ・リーに電話してシャオ・リーに尋ねました。シャオ・リーは最初それを知らなかったので、ただ尋ねましたシャオ・ワンは、目の前のことを終えてから答えを考えると言いました。シャオ・ワンはそうします電話を持ってシャオ・リーの答えを待つだけではなく、シャオ・ワンがシャオ・リーに「私はまだ買い物に行きたいのですが、答えがわかったら電話して教えてください。だから電話を切って自分のことをしてください」と言いました。 1 時間後、Xiao Li は Xiao Wang に電話して、答えは 2
  • /** 
     * 这是一个回调接口 
     * @author xiaanming 
     * 
     */ 
    public interface CallBack { 
     /** 
      * 这个是小李知道答案时要调用的函数告诉小王,也就是回调函数 
      * @param result 是答案 
      */ 
     public void solve(String result); 
    }
    rreerreerree
上記の例のコールバックの仕組みをほぼ理解できましたか? 同期コールバックを見てみましょう。 ,

onClick
() メソッド

次に、

Android

View のクリック メソッド onclick() を分析しましょう。このメソッドは、ユーザーが View をクリックしたときに実行されることがわかります。例

/** 
 * 这个是小王 
 * @author xiaanming 
 * 实现了一个回调接口CallBack,相当于----->背景一 
 */ 
public class Wang implements CallBack { 
 /** 
  * 小李对象的引用 
  * 相当于----->背景二 
  */ 
 private Li li; 
 
 /** 
  * 小王的构造方法,持有小李的引用 
  * @param li 
  */ 
 public Wang(Li li){ 
  this.li = li; 
 } 
  
 /** 
  * 小王通过这个方法去问小李的问题 
  * @param question 就是小王要问的问题,1 + 1 = ? 
  */ 
 public void askQuestion(final String question){ 
  //这里用一个线程就是异步, 
  new Thread(new Runnable() { 
   @Override 
   public void run() { 
    /** 
     * 小王调用小李中的方法,在这里注册回调接口 
     * 这就相当于A类调用B的方法C 
     */ 
    li.executeMessage(Wang.this, question); 
   } 
  }).start(); 
   
  //小网问完问题挂掉电话就去干其他的事情了,诳街去了 
  play(); 
 } 
 
 public void play(){ 
  System.out.println("我要逛街去了"); 
 } 
 
 /** 
  * 小李知道答案后调用此方法告诉小王,就是所谓的小王的回调方法 
  */ 
 @Override 
 public void solve(String result) { 
  System.out.println("小李告诉小王的答案是--->" + result); 
 } 
  
}
rree以下は、クラスBに相当するViewクラスのsetOnClickListenerメソッドです。キーコードのみ掲載しています
/** 
 * 这个就是小李啦 
 * @author xiaanming 
 * 
 */ 
public class Li { 
 /** 
  * 相当于B类有参数为CallBack callBack的f()---->背景三 
  * @param callBack 
  * @param question 小王问的问题 
  */ 
 public void executeMessage(CallBack callBack, String question){ 
  System.out.println("小王问的问题--->" + question); 
   
  //模拟小李办自己的事情需要很长时间 
  for(int i=0; i<10000;i++){ 
    
  } 
   
  /** 
   * 小李办完自己的事情之后想到了答案是2 
   */ 
  String result = "答案是2"; 
   
  /** 
   * 于是就打电话告诉小王,调用小王中的方法 
   * 这就相当于B类反过来调用A的方法D 
   */ 
  callBack.solve(result);  
 } 
}

この例は、Androidの典型的なコールバック機構です。これを読んで、もっと良い方法があるでしょうか。コールバックの仕組みは理解できましたか? Thread run() もコールバックメソッドです。 Thread の start() メソッドが実行されると、 run() メソッドがコールバックされ、メッセージなどを処理することもできます。

【関連おすすめ】

1.

Java 無料ビデオチュートリアル

2.

Alibaba Java 開発マニュアル

3.

Geek Academy Java ビデオチュートリアル

以上がコールバック機構の詳細なコード説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。