更新时间:2022-07-21 10:52:02 来源:极悦 浏览1999次
与C和C++ 语言不同,Java没有回调函数的概念。Java 不使用指针的概念,因此不支持回调函数。但是,我们可以通过传递引用函数位置的接口而不是传递函数的内存地址来创建回调函数。
Java中使用接口的回调函数的语法如下:
公共接口 接口A {
公共 字符串 callA() ;
}
Java 中的回调函数的工作方式如下:
创建一个具有单个方法 A() 的接口 X。
使用 A 作为方法参数创建方法 method1()。
在 method1() 中调用 A() 方法。
为了调用 method1(),我们传递 X 的实例并覆盖 A()。
使用箭头符号作为关键字新闻的替代方法,以便代码清晰。
让我们举个例子,理解一个我们可以在Java中使用回调函数的场景,
例子:
我们实现了计算州税(总税)的税收计算器。对于一个州,税收可以不止一种,但对于我们的示例,假设我们只有两种税,即州税和中央税。在这两种税中,所有州的中央税都相同,但各州的州税可能不同。
static void calculateTax(stateTax() 函数的地址)
{
中央税= 2500.0
state_tax = 根据 接口 方法 的地址获取
total_tax = central_tax + state_tax;
}
在上面的代码中,stateTax() 方法的地址或引用被传递用于计算calculateTax() 方法中的税款总和。状态代码因状态而异,因此我们将 stateTax() 方法声明为接口中的抽象方法。
接口 状态税
{
双 州税();
}
下面是哈里亚纳邦和北方邦的 stateTax() 方法的实现:
哈里亚纳邦 类实现 StateTax{
公共双 州税(){
返回1500.0 ;
}
}
UP 类实现 StateTax{
公共双 州税(){
返回2500.0 ;
}
}
CallbackExample1.java
//导入需要的类和包
导入 java.util.Scanner;
//创建具有抽象方法stateTax()的接口StateTax
界面 州税{
//声明抽象方法
双 州税();
}
// 实现哈里亚纳邦的 StateTax 接口
哈里亚纳邦 类实施 StateTax {
公共双重 状态税()
{
返回1500.0 ;
}
}
// 为 Utter Pradesh 实现 StateTax 接口
UP 类实施 StateTax {
公共双重 状态税()
{
返回2500.0 ;
}
}
// 创建 CallbackExample1 来计算总税额
类 回调示例 1 {
//main() 方法开始
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException //处理异常
{
//创建一个 Scanner 类的实例来接受用户输入
扫描仪 sc = new Scanner(System.in);
System.out.println( "输入状态名" );
//从用户那里获取状态名称
字符串状态 = sc.next();
// 将状态名称存储在对象 obj 中
类 obj = Class.forName(state);
// 创建由 StateTax 引用的 obj 类的新对象
StateTax 参考 = (StateTax)obj.newInstance();
//通过传递StateTax的引用调用calculateTax()方法计算总税
计算税(参考);
}
static void calculateTax(StateTax 数据)
{
//所有州的中央税都相同
双 中央税= 3500.0 ;
// 获取用户输入状态的 state_Tax 并找到总税
双 state_Tax = data.stateTax();
双 总税 = state_Tax + central_Tax;
// 显示结果
System.out.println( "该州的总税额为=" +total_Tax);
}
}
输出:
CallbackExample2.java
//为回调方法创建一个处理点击事件的接口
接口 点击处理程序 {
//创建抽象方法,即clickEventHandler(),它将作为回调
公共无效 点击事件处理程序();
}
//创建一个处理回调并实现ClickHandler的类
类 处理 程序实现 ClickHandler {
//定义clickEventHandler()方法
公共无效 clickEventHandler(){
System.out.println( "按钮正在点击" );
}
}
//创建一个生成事件的类
类 按钮类 {
公共无效 onClickEvent(ClickHandler obj)
{
obj.clickEventHandler();
}
}
//创建CallbackExample2类
公共类 CallbackExample2 {
//main() 方法开始
公共静态无效 主要(字符串[]参数){
//创建一个ButtonClass对象
ButtonClass button = new ButtonClass();
//创建Handler类的对象
处理程序 hndlrObj = 新的 处理程序();
//传递ClickHandler的对象来执行默认操作
button.onClickEvent(hndlrObj);
//创建另一个ButtonClass对象
ButtonClass newButton = new ButtonClass();
//传递接口实现自己的操作
newButton.onClickEvent(新 ClickHandler(){
@覆盖
//覆盖在点击时显示输出的clickEventHandler()
公共无效 clickEventHandler(){
System.out.println( "按钮被点击" );
}
});
}
}
输出:
CallbackExample3.java
//为callback()方法创建类CallbackExample3
公共类 CallBackExample3 {
//主方法开始
公共静态无效 主要(字符串参数[]){
//将接口名称作为参数传递的函数
//创建一个方法并将接口作为参数传递
回调方法(新 接口X()
{
//创建callMethodX()
公共 字符串 callMethodX()
{
return "这是第一个回调" ;
}
});
// 创建一个方法并将接口作为参数传递
回调方法(新 接口X()
{
//创建callMethodX()
公共 字符串 callMethodX() {
return "这是第二次回调" ;
}
});
回调方法(()->
{
return "It is the third callback";
});
}
//define callbackMethod()
public static void callbackMethod(interfaceX obj)
{
//print callback messages
System.out.println(obj.callMethodX());
}
//create an interface
public interface interfaceX {
public String callMethodX();
}
}
输出:
以上就是关于“Java回调函数的实现”介绍,大家如果想了解更多相关知识,不妨来关注一下极悦的Java极悦在线学习,里面的课程内容从入门到精通,细致全面,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习