使用 Java 中的接口进行回调
原文:https://www . geesforgeks . org/callback-use-interfaces-Java/
C/c++中的回调:从另一个函数调用一个函数的机制称为“回调”。在像 C 和 C++这样的语言中,函数的内存地址被表示为“函数指针”。因此,回调是通过将函数 1()的指针传递给函数 2()来实现的。 Java 中的回调:但是回调函数的概念在 Java 中并不存在,因为 Java 没有指针的概念。然而,在某些情况下,人们可以谈论回调对象或回调接口。接口不是传递函数的内存地址,而是传递引用函数位置的接口。
例
让我们举一个例子来理解回调可以在哪里使用。假设一个程序员想设计一个计算一个州总税收的税收计算器。假设只有两种税,中央税和州税。中央税收是常见的,而州税因州而异。总税收是两者的总和。这里,像 stateTax()这样的单独方法为每个州实现,并从另一个方法 calculateTax()调用该方法,如下所示:
static void calculateTax(address of stateTax() function)
{
ct = 1000.0
st = calculate state tax depending on the address
total tax = ct+st;
}
在前面的代码中,stateTax()的地址被传递给 calculateTax()。calculateTax()方法将使用该地址调用特定州的 stateTax()方法,并计算州税“st”。 由于 stateTax()方法的代码从一个状态变为另一个状态,不如在一个接口中声明为抽象方法,如:
interface STax
{
double stateTax();
}
以下是旁遮普邦州税()的执行情况:
class Punjab implements STax{
public double stateTax(){
return 3000.0;
}
}
以下是惠普状态的 stateTax()的实现:
class HP implements STax
{
public double stateTax()
{
return 1000.0;
}
}
现在,calculateTax()方法可以设计为:
static void calculateTax(STax t)
{
// calculate central tax
double ct = 2000.0;
// calculate state tax
double st = t.stateTax();
double totaltax = st + ct;
// display total tax
System.out.println(“Total tax =”+totaltax);
}
这里,观察 calculateTax()方法中的参数“STax t”。“t”是“STax”接口的引用,该接口作为参数传递给方法。使用此引用,调用 stateTax()方法,如下所示:
double st = t.stateTax();
这里,如果“t”指的是旁遮普类的 stateTax()方法,那么调用该方法并计算其税收。同样,对于惠普级。这样,通过将接口引用传递给 calculateTax()方法,就可以调用任何状态的 stateTax()方法。这叫回调机制。 通过传递引用一个方法的接口引用,可以从另一个方法调用和使用该方法。
Java 语言(一种计算机语言,尤用于创建网站)
// Java program to demonstrate callback mechanism
// using interface is Java
// Create interface
import java.util.Scanner;
interface STax {
double stateTax();
}
// Implementation class of Punjab state tax
class Punjab implements STax {
public double stateTax()
{
return 3000.0;
}
}
// Implementation class of Himachal Pardesh state tax
class HP implements STax {
public double stateTax()
{
return 1000.0;
}
}
class TAX {
public static void main(String[] args)
throws ClassNotFoundException, IllegalAccessException, InstantiationException
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter the state name");
String state = sc.next(); // name of the state
// The state name is then stored in an object c
Class c = Class.forName(state);
// Create the new object of the class whose name is in c
// Stax interface reference is now referencing that new object
STax ref = (STax)c.newInstance();
/*Call the method to calculate total tax
and pass interface reference - this is callback .
Here, ref may refer to stateTax() of Punjab or HP classes
depending on the class for which the object is created
in the previous step
*/
calculateTax(ref);
}
static void calculateTax(STax t)
{
// calculate central tax
double ct = 2000.0;
// calculate state tax
double st = t.stateTax();
double totaltax = st + ct;
// display total tax
System.out.println("Total tax =" + totaltax);
}
}
输出:
Enter the state name
Punjab
Total tax = 5000.0
参考文献: 如何在 Java 中实现回调函数? 核心 Java:集成方法
版权属于:月萌API www.moonapi.com,转载请注明出处