利用java的接口实现回调
时间:2022-05-04
本文章向大家介绍利用java的接口实现回调,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
onclick,onfocus,onload,oncreate...... 我们在java GUI 编程、js事件、android组建中常常见到这些单词,这些函数就是回调函数。C语言利用指针实现回调,与面向对象的语言不同。我们这里介绍利用java的接口实现回调的方法。
回调是一种双向的调用模式,例如我们要调用B的一个特定的方法,B在执行完又要调用A的一个方法,而这个A(或者说A的这个方法)是由我们自己实现的。所以可以这样理解:“回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。”
不过,有了面向对象的机制后,我们就可以轻松地使用这套机制来实现回调了,让回调变得简单。
例子:
package com.yawn.callback;
/**
* 回调要达到的效果就是在执行完b的go方法之后,再自动调用我们自己实现的onFinish方法
* A可以是任何一个实现了Finish接口的类,用于存放我们实现的onFinish方法
*
* @author yawn
*
*/
public class CallBack {
public static void main(String[] args) {
B b = new B(new A()); // 初始化B并指定B所要回调的对象(方法)
b.go();
}
}
class A implements Finish{
@Override
public void onFinish() {
System.out.println("finish");
}
}
package com.yawn.callback;
/**
* B的内部实现也很简单,只需要一个接口类型的成员变量(这个成员变量的具体实现由我们初始化B时指定),
* 在执行方法完成时调用这个成员变量(接口对象)的onFinish方法即可
*
* @author yawn
*
*/
public class B {
Finish f ;
public B(Finish f){
this.f = f;
}
void go(){
System.out.println("Go go go!");
if (f != null){
f.onFinish();
}
}
}
package com.yawn.callback;
public interface Finish {
void onFinish();
}
这样就可以在调用B的go方法之后又调用我们实现的onFinish方法了。
运行结果
Go go go!
finish
其实在初始化B时不一定要实现一个类A,也可以直接实现接口中的方法:
package com.yawn.callback;
/**
* 回调要达到的效果就是在执行完b的go方法之后,再自动调用我们自己实现的onClick方法
* A可以是任何一个实现了Finish接口的类,用于存放我们实现的onFinish方法
*
* @author yawn
*
*/
public class CallBack {
public static void main(String[] args) {
B b = new B(new Finish() {
@Override
public void onFinish() {
System.out.println("finish");
}
});
b.go();
}
}
- [WCF 4.0新特性] 路由服务[原理篇]
- 通过“访问多种数据库”的代码来学习多态!(.net2.0版)
- [WCF-Discovery] 客户端如何能够“探测”到可用的服务?
- WCF的安全审核——记录谁在敲打你的门
- Step By Step 一步一步写网站[1] —— 填加数据
- 五个解决方案让MongoDB拥有RDBMS的鲁棒性事务
- Step By Step 一步一步写网站[1] —— 帧间压缩,表单控件
- [WCF-Discovery]如何利用”发现代理”实现可用服务的实时维护?
- 深度学习与机器学习
- Step By Step 一步一步写网站[1] —— 填加数据(二)
- [WCF-Discovery]让服务自动发送上/下线通知[原理篇]
- [WCF-Discovery]让服务自动发送上/下线通知[实例篇]
- [WCF权限控制]利用WCF自定义授权模式提供当前Principal[实例篇]
- [WCF权限控制]利用WCF自定义授权模式提供当前Principal[原理篇]
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- PDO::inTransaction讲解
- 小程序前后端交互使用JWT
- python文件操作seek()偏移量,读取指正到指定位置操作
- 使用OpenCV去除面积较小的连通域
- 使用vs code编辑调试php配置的方法
- Python OpenCV去除字母后面的杂线操作
- PDO::rollBack讲解
- PyTorch的torch.cat用法
- keras在构建LSTM模型时对变长序列的处理操作
- Discuz不使用插件实现简单的打赏功能
- Pytorch学习之torch用法—-比较操作(Comparison Ops)
- PHP里的$_GET数组介绍
- PHP中$GLOBALS与global的区别详解
- MyBatis源码解析之基础模块—Log
- 启用OPCache提高PHP程序性能的方法