ホームページ  >  記事  >  Java  >  Javaコールバック関数

Javaコールバック関数

WBOY
WBOYオリジナル
2024-08-30 15:33:48381ブラウズ

コールバックとは、イベント駆動型プログラミングにおいて特定のイベントが発生した際に、関数に渡された参照が呼び出される仕組みです。 C、C++ などのプログラミング言語の場合、コールバックは function1 ポインタを function2 に渡すことによって実現されます。 Java はポインターをサポートしていないため、コールバックをこのように実装することはできません。そのために、インターフェイスが作成され、関数の場所が参照される場所に渡されます。この記事では、コールバック関数についてさらに詳しく説明します。

構文:

広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

以下は、コールバック関数を備えたインターフェースが存在する場合のコールバック関数の構文です。このメソッドは後でクラス内で使用されます。

public interface interfaceA {
public String callA() ;
}

Java コールバック関数はどのように機能しますか?

コールバック関数がどのように動作するかを簡単に見てみましょう。

  • 1 つのメソッド callA() だけを使用してインターフェイスを作成します。
  • メソッド パラメータとして A を使用してメソッド func1 を作成します。
  • func1 内で callA() を呼び出します。
  • A の新しいインスタンスを渡し、func1 を呼び出すメソッド callA() をオーバーライドします。
  • コードがきれいに見えるように、キーワード ニュースの代わりに矢印表記を使用します。

Java コールバック関数の実装例

次に、Java コールバック関数のサンプル プログラムをいくつか示します。

例 #1

ボタンがクリックされたときにテキストを印刷する 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");
         }
      });
   } }

出力:

Javaコールバック関数

説明: まず、button1、ClickHandler、button2 のオブジェクトを作成します。次に、デフォルトの操作を実行するための Click Handler のオブジェクトを渡します。その後、独自の操作を実装するために、クリック時に出力を表示するメソッド clickhndlr をインターフェイスに渡します。これらがすべて完了したら、コールバック メソッドのインターフェイス clickeventhandlrinterfce を作成します。次に、clickeventhandlrinterfce インターフェイスを実装するコールバック ハンドラー ClickHandler を作成し、最後にイベント ジェネレーターのクラスを作成します。コードを実行すると、上のサンプル出力に示すように 2 行が出力されます。

例 #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();
    }
}

出力:

Javaコールバック関数

説明: このプログラムでは、callA() メソッド 1 つだけでインターフェイスが作成されます。次に、別のメソッド func1 が、interfaceA をメソッド パラメータとして作成されます。その後、func1内でinterfaceA.callA()を呼び出します。これらの手順が完了したら、interfaceA の新しいインスタンスを渡し、func1 を呼び出すメソッド callA() をオーバーライドします。ここでは、コードがすっきり見えるように、キーワード new の代わりに矢印表記が使用されています。コードを実行すると、上の図に示すように、3 つのメソッドが呼び出され、結果が返されることがわかります。

例 #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");
  }
}

出力:

Javaコールバック関数

説明: このプログラムでは、インターフェイスを作成し、そのインターフェイスを実装するクラスを作成します。そのクラス内に、テキストをパラメータとして受け取るメソッドsamplefuncを作成します。作成されたクラス オブジェクトを使用してメソッドが呼び出され、コードの実行時に文字列が出力されます。

例 #4

クラスに基づいて 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); 
	} 
}

出力:

Javaコールバック関数

説明: このプログラムでは、インターフェースが作成され、クラスのメソッドが呼び出されます。ここでは、ユーザー入力に基づいてコールバック関数を使用して 2 つの金額の合計が求められます。

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

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