回调是一种在事件驱动编程中发生特定事件时调用传递给函数的引用的机制。对于 C、C++ 等编程语言,回调是通过将 function1 指针传递给 function2 来实现的。由于Java不支持指针,因此无法这样实现回调。为此,在引用函数位置的地方创建并传递接口。在本文中,将讨论有关回调函数的更多细节。
语法:
广告 该类别中的热门课程 JAVA 掌握 - 专业化 | 78 课程系列 | 15 次模拟测试开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
下面是回调函数的语法,其中存在带有回调函数的接口。这个方法稍后会在类中使用。
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 方法传递接口,该方法在单击时显示输出。所有这些完成后,为回调方法创建一个接口clickeventhandlinterfce。然后,创建一个实现 clickeventhandlrinterfce 接口的回调处理程序 ClickHandler,最后为事件生成器创建一个类。执行代码时,将打印两行,如上面的示例输出所示。
实现回调函数的简单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() 创建一个接口。然后,使用interfaceA 作为方法参数创建另一个方法func1。之后,在func1内部调用interfaceA.callA()。完成这些步骤后,传递一个新的 interfaceA 实例并重写方法 callA() 来调用 func1。这里使用箭头表示法来替代关键字new,以使代码看起来更干净。执行代码可以看到调用了三个方法,并返回了结果,如上图
实现回调函数并打印字符串的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,它将文本作为参数。使用创建的类对象,调用该方法,并在执行代码时打印字符串。
根据类将两个数字相加的 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回调函数的详细内容。更多信息请关注PHP中文网其他相关文章!