English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Androidプログラミングにおける匿名内部クラスとコールバック関数の使用法分析

このドキュメントでは、Androidプログラミングにおける匿名内部クラスとコールバック関数の使用法を例示しています。皆さんに参考にしていただくために共有します。具体的には以下の通りです:

私たちのAndroid開発では、匿名内部クラスとその中のコールバック関数がよく使用されます。例えば、Buttonにリスナーを設定する際には、OnCLickListenerインターフェースを実装し、その中のOnclick()メソッドをオーバーライドする必要があります。これは匿名内部クラスとコールバック関数です。それでは、Javaの匿名内部クラスとコールバック関数についてどの程度理解していますか?このドキュメントでは詳細な説明を提供しています。

まず知っておくべきは、内部クラスはJAVA言語の主要な追加部分です。内部クラスはクラス内のどこにでも存在し得、インスタンス変数と同じレベルに存在したり、メソッド内に存在したり、さらに表現の一部として存在することもできます。JAVAの内部クラスは、メンバー内部クラス、ローカル内部クラス、および匿名内部クラスに分類されます。以下に匿名内部クラスについて説明します。

A.コールバック関数について

匿名内部クラスではコールバック関数が使用されています。コールバック関数とは何ですか?

コールバックとは、クライアントプログラムCがサービスプログラムS内の某个関数Aを呼び出し、Sがその後ある時点でC内の某个関数Bを逆に呼び出すことです。Cにとっては、このBをコールバック関数と呼びます。例えばWin32ウィンドウプロセス関数は典型的なコールバック関数です。一般的には、CはBを自分で呼び出しません。CがBを提供する目的はSがそれを呼び出すことです。そして、Cは提供する必要があります。SがCが提供するBの名前や性別を知らないため、SはBのインターフェース規格(関数プロトタイプ)を約束し、Cは事前にSの関数Rを通じてSにB関数を使用する旨を告げるプロセスです。これはコールバック関数の登録と呼ばれ、Rは登録関数と呼ばれます。Web ServiceやJavaのRMIはコールバックメカニズムを使用し、リモートサーバープログラムにアクセスできます。以下に例を示します:

プログラマーAはプログラムaにコールバック関数インターフェースを预留し、そのプログラムを包装しました。プログラマーBはaを通じて自分のプログラムbの中のメソッドを呼び出したいので、aの中のインターフェースを通じて自分のbの中のメソッドをコールバックします。目的を達成しました。在C/C++中でコールバック関数を使用する必要があります。コールバック関数は呼び出し元に自分のポインターアドレスを伝える必要がありますが、JAVAにはポインタがありません。どうすればよいですか?インターフェース(interface)を通じてコールバック関数を定義できます。

仮に私はプログラマーAであれば、以下は私のプログラムaです:

public class Caller
{
  public MyCallInterface mc;
  public void setCallfuc(MyCallInterface mc)
  {
    this.mc= mc;
  }
  public void call(){
    this.mc.method();
  }
}

私は別のインターフェースを定義する必要があります。プログラマーBが私の定義に基づいてプログラムを実装できるように。

public interface MyCallInterface
{
  public void method();
}

したがって、プログラマーBはこのインターフェースを実装することでコールバックの目的を達成できます:

public class B implements MyCallInterface
{
  public void method()
  {
    System.out.println("コールバック");
  }
  public static void main(String args[])
  {
    Caller call = new Caller();
    call.setCallfuc(new B());
    call.call();
  }
}

B. 匿名内部クラスについて

内部クラスとは何か、内部クラスの役割、Javaの多態性、コールバック関数とは何かを理解する必要があります。ネット上には多くの詳細な説明がありますが、簡単にするために簡単な説明のみを行いました。匿名内部クラスは関数の引数としてメソッドに渡され、そのメソッドではインターフェースタイプで匿名クラスを受け取り、そのメソッドを呼び出すことで多態性が実現されます。原理的にはコールバックが実現されています。なぜなら、匿名内部クラスの中のメソッドを呼び出すからです。以下のコードは手打ちであり、テストされていませんが、デモ用に作成されました。

interface InterfaceA{
   String go();
}
class Test{
   public void prtGo(InterfaceA ia){
     System.out.println(ia.o());
   }
  public static void main(String []args){
     Test t = new Test();
     t.prtGo(new InterfaceA(){
       public String go(){
         return"go";
       }
     });
   }
}

Androidに関するさらに詳しい内容に興味がある読者は、以下の本サイトの特集を参照してください:《Android開発入門と進階チュートリアル》、《Androidデバッグ技術とよくある問題の解決方法まとめ》、《Androidメディア操作技術まとめ(音声、ビデオ、録音など)》、《Android基本コンポーネントの使用法まとめ》、《AndroidビューViewの技術まとめ》、《Androidレイアウトlayoutの技術まとめ》および《Androidコントロールの使用法まとめ》

本文の内容が皆様のAndroidプログラム設計に役立つことを願っています。

声明:本文の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしました。本サイトは所有権を持ちません。また、人工編集は行われていません。著作権侵害を疑う内容がある場合は、以下のメールアドレスまでお知らせください:notice#oldtoolbag.com(メールの際は、#を@に変更してください)で通報してください。関連する証拠を提供していただければ、本サイトはすぐに侵害を疑う内容を削除します。

おすすめ