>  기사  >  Java  >  자바 콜백 함수

자바 콜백 함수

WBOY
WBOY원래의
2024-08-30 15:33:48403검색

콜백은 이벤트 기반 프로그래밍에서 특정 이벤트가 발생할 때 함수에 전달된 참조가 호출되는 메커니즘입니다. C, C++와 같은 프로그래밍 언어의 경우 function1 포인터를 function2에 전달하여 콜백을 얻습니다. Java는 포인터를 지원하지 않으므로 콜백을 이와 같이 구현할 수 없습니다. 이를 위해 함수의 위치를 ​​참조하는 인터페이스가 생성되고 전달됩니다. 이번 글에서는 콜백 함수에 대해 좀 더 자세히 알아보겠습니다.

구문:

광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

다음은 콜백 함수와 인터페이스가 존재하는 콜백 함수의 구문입니다. 이 방법은 나중에 수업 내에서 사용됩니다.

public interface interfaceA {
public String callA() ;
}

Java 콜백 기능은 어떻게 작동하나요?

콜백 함수가 어떻게 작동하는지 간단하게 살펴보겠습니다.

  • 단 하나의 메소드 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");
         }
      });
   } }

출력:

자바 콜백 함수

설명: 먼저 버튼1, ClickHandler 및 버튼2에 대한 개체를 만듭니다. 그런 다음 기본 작업을 수행하기 위해 Click Handler 개체를 전달합니다. 그런 다음 자체 작업을 구현하려면 클릭 시 출력을 표시하는 clickhndlr 메서드를 사용하여 인터페이스를 전달합니다. 이 모든 작업이 완료되면 콜백 메서드에 대한 인터페이스 clickeventhandlinterfce를 만듭니다. 그런 다음 clickeventhandlrinterfce 인터페이스를 구현하는 콜백 핸들러 ClickHandler를 만들고 마지막으로 이벤트 생성기에 대한 클래스를 만듭니다. 코드를 실행하면 위의 샘플 출력과 같이 두 줄이 인쇄됩니다.

예시 #2

콜백 기능을 구현한 간단한 자바 프로그램

코드:

//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() 메소드 하나로 인터페이스가 생성됩니다. 그런 다음, 인터페이스A를 메서드 매개 변수로 사용하여 다른 메서드 func1이 생성됩니다. 그런 다음 func1 내부에서 인터페이스A.callA()를 호출합니다. 이러한 단계가 완료되면 인터페이스A의 새 인스턴스를 전달하고 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 메서드를 만듭니다. 생성된 클래스 객체를 이용하여 메소드가 호출되고, 코드 실행시 문자열이 출력됩니다.

예시 #4

클래스에 따라 두 개의 숫자를 더하는 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); 
	} 
}

출력:

자바 콜백 함수

설명: 이 프로그램에서는 인터페이스가 생성되고 클래스 메서드가 호출됩니다. 여기서는 사용자 입력을 기반으로 콜백 함수를 이용하여 두 금액의 합을 구합니다.

위 내용은 자바 콜백 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Java의 재귀다음 기사:Java의 재귀