コールバックとは、イベント駆動型プログラミングにおいて特定のイベントが発生した際に、関数に渡された参照が呼び出される仕組みです。 C、C++ などのプログラミング言語の場合、コールバックは function1 ポインタを function2 に渡すことによって実現されます。 Java はポインターをサポートしていないため、コールバックをこのように実装することはできません。そのために、インターフェイスが作成され、関数の場所が参照される場所に渡されます。この記事では、コールバック関数についてさらに詳しく説明します。
構文:
広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
以下は、コールバック関数を備えたインターフェースが存在する場合のコールバック関数の構文です。このメソッドは後でクラス内で使用されます。
public interface interfaceA { public String callA() ; }
コールバック関数がどのように動作するかを簡単に見てみましょう。
次に、Java コールバック関数のサンプル プログラムをいくつか示します。
ボタンがクリックされたときにテキストを印刷する Java プログラム。
コード:
//Create an interface clickeventhandlrinterfce for the callback method interface clickeventhandlrinterfce { //call method clickhndlr public void clickhndlr(); } //Create a callback handler ClickHandler that implements the clickeventhandlrinterfce interface class ClickHandler implements clickeventhandlrinterfce { //call method clickhndlr public void clickhndlr() { System.out.println("Hey. . . You have Clicked"); } } //Create class for event generator class Button { public void onClick(clickeventhandlrinterfce chndlr) { chndlr.clickhndlr(); } } public class CallBackFuncExample { public static void main(String[] args) { //create an object for btn2 Button btn1 = new Button(); //create an object for ClickHandler ClickHandler chndlr = new ClickHandler(); //pass the object of ClickHandler for performing the default operation btn1.onClick(chndlr); //create an object for button2 Button btn2 = new Button(); //For implementing own operation, pass the interface btn2.onClick(new clickeventhandlrinterfce() { @Override //method clickhndlr that displays output on clicking public void clickhndlr() { System.out.println("Hey. . . You have clicked a button"); } }); } }
出力:
説明: まず、button1、ClickHandler、button2 のオブジェクトを作成します。次に、デフォルトの操作を実行するための Click Handler のオブジェクトを渡します。その後、独自の操作を実装するために、クリック時に出力を表示するメソッド clickhndlr をインターフェイスに渡します。これらがすべて完了したら、コールバック メソッドのインターフェイス clickeventhandlrinterfce を作成します。次に、clickeventhandlrinterfce インターフェイスを実装するコールバック ハンドラー ClickHandler を作成し、最後にイベント ジェネレーターのクラスを作成します。コードを実行すると、上のサンプル出力に示すように 2 行が出力されます。
コールバック関数を実装する単純な Java プログラム。
コード:
//class starts here public class CallBackFuncExample { //main method public static void main(String args[]) { //Function that passes interface name as parameter func1(new interfaceA() { //method callA public String callA() { return "HI, I AM FIRST CALL "; } } ) ; // function that passes interface name as parameter func1(new interfaceA() { //method callA public String callA() { return "HI, I AM SECOND CALL"; } } ) ; func1(() -> { return "HI, I AM THIRD CALL"; }); } public static void func1(interfaceA intr) { System.out.println("Method called here: " + intr.callA()); } public interface interfaceA { public String callA(); } }
出力:
説明: このプログラムでは、callA() メソッド 1 つだけでインターフェイスが作成されます。次に、別のメソッド func1 が、interfaceA をメソッド パラメータとして作成されます。その後、func1内でinterfaceA.callA()を呼び出します。これらの手順が完了したら、interfaceA の新しいインスタンスを渡し、func1 を呼び出すメソッド callA() をオーバーライドします。ここでは、コードがすっきり見えるように、キーワード new の代わりに矢印表記が使用されています。コードを実行すると、上の図に示すように、3 つのメソッドが呼び出され、結果が返されることがわかります。
コールバック関数を実装し、文字列を出力する Java プログラム。
コード:
//create an interface interface textprint { void samplefunc(String txt); } //create a class that implements the interface class classA implements textprint { //create a method samplefunc that takes a text as a parameter public void samplefunc(String txt) { System.out.println("The text is : " + txt); } } //main class public class CallBackFuncExample { // Reference to the textprint Interface textprint txtrcvr; CallBackFuncExample(textprint r) { txtrcvr = r ; } public void samplefunc2(String s) { txtrcvr.samplefunc(s); } //main method public static void main(String[] args) { // Create a object of the classA that implements the interface classA objA = new classA(); CallBackFuncExample obj2 = new CallBackFuncExample(objA); obj2.samplefunc2("Program runs successfully"); } }
出力:
説明: このプログラムでは、インターフェイスを作成し、そのインターフェイスを実装するクラスを作成します。そのクラス内に、テキストをパラメータとして受け取るメソッドsamplefuncを作成します。作成されたクラス オブジェクトを使用してメソッドが呼び出され、コードの実行時に文字列が出力されます。
クラスに基づいて 2 つの数値を加算する Java プログラム。
コード:
import java.util.Scanner; //create an interface interface interfaceA { double func1(); } // class A that implements the interface class A implements interfaceA { public double func1() { return 2500.0; } } //class B that implements the interface class B implements interfaceA { public double func1() { return 1500.0; } } class CallBackFuncExample { //MAIN METHOD public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException { //scanner object Scanner sc = new Scanner(System.in); System.out.println("Enter the class name"); String classnm = sc.next(); // object is then stored in cl Class cl = Class.forName(classnm); interfaceA intr = (interfaceA)cl.newInstance(); func2(intr); } static void func2(interfaceA intrfce) { double a = 2000.0; double b = intrfce.func1(); double sum = b + a; System.out.println("Total amount is :" + sum); } }
出力:
説明: このプログラムでは、インターフェースが作成され、クラスのメソッドが呼び出されます。ここでは、ユーザー入力に基づいてコールバック関数を使用して 2 つの金額の合計が求められます。
以上がJavaコールバック関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。