JAvaコールバック

9699 ワード

コールバック関数は本当にあなたが持っているBP機に似ています:他の人に番号を教えて、それが用事がある時Callはあなたがコールバックして層間の協力に使用して、上層は本層の関数を下層にインストールして、この関数はコールバックで、下層は一定の条件の下でコールバックをトリガーして、例えば1つの駆動として、1つの下層で、彼は1つのデータを受け取る時、本層の処理の仕事を完成する以外に、階層化されたデータ通信では一般的に、このデータを上位アプリケーション層に渡してさらなる処理を行うコールバックも行われる.実際にはコールバックとAPIは非常に近く、彼らの共通性は階層間呼び出しの関数である.しかし、違いはAPIが低層から高層に提供される呼び出しであり、一般的にこの関数は高層に対して既知である.コールバックは正反対に、彼は上層部が下層部に提供する呼び出しであり、低層については未知であり、上層部がインストールしなければならない.このインストール関数は実は低層が提供するAPIであり、インストール後の低層はこのコールバックの名前を知らないが、関数の指針でこのコールバックを保存し、呼び出す必要がある場合、この関数ポインタと関連するパラメータポインタを参照するだけです.実は:コールバックはこの関数が上層部に書かれていて、低層は1つの関数ポインタでこの関数を保存して、あるイベントのトリガの下で、低層はこの関数ポインタで上層部の関数を呼び出します.コールバックのまとめについて:Javaでは、通常、別のクラスやクラスライブラリを作成する人がインタフェースを規定し、このインタフェースを実現し、このインタフェースのオブジェクトをパラメータとして他の人のプログラムに渡し、他の人のプログラムが必要に応じてそのインタフェースを通じて作成した関数を呼び出します.
 
次にjavaコールバック関数を使用して、関数の実行時間をテストするツールクラスを実装します.クラスのメソッドの実行時間をテストする場合は、通常、javaコード
 1 public class TestObject {   
2 /**
3 * ,
4 */
5 public static void testMethod(){
6 for(int i=0; i<100000000; i++){
7
8 }
9 }
10 /**
11 *
12 */
13 public void testTime(){
14 long begin = System.currentTimeMillis();//
15 testMethod();//
16 long end = System.currentTimeMillis();//
17 System.out.println("[use time]:" + (end - begin));//
18 }
19
20 public static void main(String[] args) {
21 TestObject test=new TestObject();
22 test.testTime();
23 }
24 }

testTime()メソッドを見ると、「//テストメソッド」だけが変更されます.次に、同じ機能を実現する関数を作成しますが、より柔軟になります.まず、コールバックインタフェースを設定します.
JAvaコード
1 public interface CallBack {   
2 //
3 void execute();
4 }

次にツールクラスを書きます.
JAvaコード
 1 public class Tools {   
2
3 /**
4 * , CallBack execute
5 * @param callBack
6 */
7 public void testTime(CallBack callBack) {
8 long begin = System.currentTimeMillis();//
9 callBack.execute();///
10 long end = System.currentTimeMillis();//
11 System.out.println("[use time]:" + (end - begin));//
12 }
13
14 public static void main(String[] args) {
15 Tools tool = new Tools();
16 tool.testTime(new CallBack(){
17 // execute
18 public void execute(){
19 //
20 TestObject.testMethod();
21 }
22 });
23 }
24
25 }

上の文字とコードでjavaというコールバックが理解できます.では、私たちは具体的にいつコールバック関数を使用しますか?
JDBCプログラミングを行う場合、try catch文ブロックによく書きますが、コールバック技術を採用すれば、重複する書き込みを完全に避けることができ、自分のメソッド体をコールバックインタフェースの方法で実現し、毎回同じtry catchに伝えられますが、それぞれのメソッドの内容は異なります.
また、例えばアルゴリズムが多い場合でも、このような実装モードを用いて実現することができる.最近SFTを見ると、多くのイベント駆動がコールバックで実現されていることがわかりました.たとえば、ボタンにイベントを追加します.
1 Button okButton = createButton(buttons, "&Ok", "Process input",
2 new MySelectionAdapter(){
3 public void widgetSelected(SelectionEvent e)
4 {
5 System.out.println("Name: " + nameField.getText());
6 System.out.println("Address: " + addrField.getText());
7 System.out.println("Phone number: " + phoneField.getText());
8 }
9 });

匿名の内部類が最もよく使われるのは、コールバックのすばらしい表現だ.
 
コールバックは双方向呼び出しモードである、すなわち、被呼び出し者は、インタフェースが呼び出すときにも相手のインタフェースを呼び出す.
 
 
 
由来:http://hi.baidu.com/dongruofan/blog/item/9f68b003488e1810728da57a.html