English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このドキュメントでは、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(メールの際は、#を@に変更してください)で通報してください。関連する証拠を提供していただければ、本サイトはすぐに侵害を疑う内容を削除します。