首页 > Java > java教程 > 正文

Java回调函数

WBOY
发布: 2024-08-30 15:33:48
原创
403 人浏览过

回调是一种在事件驱动编程中发生特定事件时调用传递给函数的引用的机制。对于 C、C++ 等编程语言,回调是通过将 function1 指针传递给 function2 来实现的。由于Java不支持指针,因此无法这样实现回调。为此,在引用函数位置的地方创建并传递接口。在本文中,将讨论有关回调函数的更多细节。

语法:

广告 该类别中的热门课程 JAVA 掌握 - 专业化 | 78 课程系列 | 15 次模拟测试

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

下面是回调函数的语法,其中存在带有回调函数的接口。这个方法稍后会在类中使用。

public interface interfaceA {
public String callA() ;
}
登录后复制

Java 回调函数如何工作?

让我们看看回调函数是如何以简单的方式工作的。

  • 仅使用一个方法 callA() 创建一个接口。
  • 创建一个方法 func1,并将 A 作为方法参数。
  • 在 func1 中调用 callA()。
  • 传递 A 的新实例并重写方法 callA() 来调用 func1。
  • 使用箭头表示法作为关键字 news 的替代,使代码看起来更干净。

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 方法传递接口,该方法在单击时显示输出。所有这些完成后,为回调方法创建一个接口clickeventhandlinterfce。然后,创建一个实现 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();
    }
}
登录后复制

输出:

Java回调函数

说明:在此程序中,仅使用一个方法 callA() 创建一个接口。然后,使用interfaceA 作为方法参数创建另一个方法func1。之后,在func1内部调用interfaceA.callA()。完成这些步骤后,传递一个新的 interfaceA 实例并重写方法 callA() 来调用 func1。这里使用箭头表示法来替代关键字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");
  }
}
登录后复制

输出:

Java回调函数

说明:在这个程序中,创建一个接口并创建一个实现该接口的类。在该类中,创建一个方法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); 
	} 
}
登录后复制

输出:

Java回调函数

说明:在这个程序中,创建了接口,并调用了类方法。此处,根据用户输入使用回调函数求出两个金额的总和。

以上是Java回调函数的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!