如何定义 Java 的回调函数,与 JavaScript 回调函数的区别
JavaScript 中的回调函数
在 JavaScript 中经常使用回调函数,比如:get 请求、post 请求等异步任务。在我们请求之前以及请求之后,都需要完成一些固定的操作,比如:请求之前先从浏览器中创建 XMLHttpRequests 对象,完成之后关闭请求,释放资源等。等这些固定操作完成之后,可能需要我们根据实际情况来完成一些自定义任务。比如,请求之后的数据我们该如何去处理;这些任务我们不可能直接修改写好的请求函数中,一百个不一样的任务我们就修改一百个不一样的请求函数?不可能!所以,回调函数就是一个非常好的编程思维。
回调函数可以提升函数的重用率,从而降低代码冗余。定义 JavaScript 回调函数非常的简单:在函数中添加一个参数作为回调函数;由于 JavaScript 的特性,在参数之后加上小括号,就可以当做一个函数来执行:
// 定义函数,第二个参数是回调函数
function write(something, callable) {
callable("Hello Callable");
}
// 使用函数
write('eat bread', function (s) {
console.log(s);
});
write('eat bread', function (s) {
let re = s.split(" ");
for (let i = 0; i < re.length; i++) {
console.log(re[i]);
}
})
Java 中的回调函数
既然回调函数这么好用,就拿我自身的经验来讲,很少甚至从来没有听说过 Java 可以定义回调函数,书上没有教,老师也没有教。冒出这样的想法也是因为学习了 JavaScript,但实际上 Java GUI 编程中的监听器大量使用了回调函数编程思维。
Java 的接口(interface)中的一个个函数都是等待这我们去实现的,它不是一个具体的函数。这样就非常符合我们回调函数的定义,听说过 Java 要面向接口编程,也是有道理的哦!
定义回调函数接口
interface WriteTextCallable {
void append(FileWriter fw);
}
调用回调函数
public class WriteText {
public void write(String filename, WriteTextCallable writeTextCallable) {
FileWriter fw;
try {
fw = new FileWriter(filename, true);
// 使用回调函数
writeTextCallable.append(fw);
fw.flush();
fw.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
其他代码都是固定的,也就是打开输出流、关闭输出流的操作。只有写入的内容要根据业务场景发生变化而已,所以在这里使用回调函数writeTextCallable.append(fw);代替执行,而不影响我们的固定操作。
测试回调函数
Lambda 简写形式:
public static void main(String[] args) {
WriteText wt = new WriteText();
wt.write("E:\\Common\\Document\\Person\\fw.txt", fw -> {
try {
fw.write("\n");
fw.write("时间:" + new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date()));
fw.write("\n");
fw.write("事情:打豆豆");
fw.write("\n");
fw.write("-----------------");
} catch (IOException e) {
throw new RuntimeException(e);
}
});
}
完整书写形式:
public static void main(String[] args) {
WriteText wt = new WriteText();
wt.write("E:\\Common\\Document\\Person\\fw.txt", new WriteTextCallable() {
@Override
public void append(FileWriter fw) {
try {
fw.write("\n");
fw.write("时间:" + new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date()));
fw.write("\n");
fw.write("事情:打豆豆");
fw.write("\n");
fw.write("-----------------");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
});
}

如何定义 Java 的回调函数,与 JavaScript 回调函数的区别的更多相关文章
- 1.jQuery入口函数 与javaScript入口函数
1.jQuery入口函数 与javaScript入口函数 JQ入口函数: $(document).ready(function(){ }); 或者 $(function(){ }) Js入口函数: w ...
- jQuery入口函数与JavaScript入口函数的区别
jQuery 的入口函数是在 html 所有标签 (DOM) 都加载之后就会去执行 JavaScript 的 window.onload 时间是等到所有内容,包括外部图片之类的文件加载完成 ...
- JavaScript之函数,词法分析,内置对象和方法
函数 函数定义 JavaScript中的函数和Python中的非常类似,只是定义方式有点区别. // 普通函数定义 function f1() { console.log("Hello wo ...
- JavaScript原生函数(内置函数)
1.JavaScript原生函数(内置函数) JavaScript原生函数(内置函数)有: String() Number() Boolean() Array() Object() Function( ...
- 理解javascript 回调函数
##回调函数定义 百度百科:回调函数 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不 ...
- javascript 回调函数
在javascript中回调函数非常重要,它们几乎无处不在.像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply() ...
- 02、Java的lambda表达式和JavaScript的箭头函数
前言 在JDK8和ES6的语言发展中,在Java的lambda表达式和JavaScript的箭头函数这两者有着千丝万缕的联系:本次试图通过这篇文章弄懂上面的两个"语法糖". 简介 ...
- 理解 JavaScript 回调函数并使用
JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...
- 【java回调】java两个类之间的回调函数传递
背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...
随机推荐
- MTK 虚拟 sensor bring up (pick up) sensor2.0
pick up bring up sensor2.0 1.SCP侧的配置 (1) 放置驱动pickup.c (2) 添加底层驱动文件编译开关 (3) 加入编译文件 (4) 增加数据上报方式 (5)修改 ...
- 关于python导入数据库excel数据时出现102, b"Incorrect syntax near '.15562'.DB-Lib error message 20018, severity 1的问题总结
1.对于在使用python导入sqlsever时,出现102, b"Incorrect syntax near '.15562'.DB-Lib error message 20018, se ...
- JavaScript之parseInt()方法
parseInt(string, radix):用于解析一个字符串并返回指定基数的十进制整数或者NaN string参数为被解析的值,如果该值不是一个字符串,则会隐式的使用toString()方法转化 ...
- CentOS8设置国内镜像源(阿里云镜像)
CentOS8设置国内镜像源(阿里云) 1.备份原有配置 [root@localhost ~]# mkdir /etc/yum.repos.d.bak [root@localhost ~]# mv / ...
- 集成学习——Adaboost(手推公式)
- Windows下MySQL的安装和删除
Windows下MySQL的安装和删除 安装Mysql 1 下载mysql 地址 2 安装教程 2.1配置环境变量 变量名:MYSQL_HOME 变量值:D:\software\programming ...
- 获取请求体数据 POST
POST获取请求体 请求体中封装了 POST请求的请求参数 获取流对象 再从流对象中那数据 一种字节流 一种字符流 BufferedReader getReader()获取字符输入流 只能操作字符 S ...
- Qt数据可视化(散点图、折线图、柱状图、盒须图、饼状图、雷达图)开发实例
目录 散点图 折线图 柱状图 水平柱状图 水平堆叠图 水平百分比柱状图 盒须图 饼状图 雷达图 Qt散点图.折线图.柱状图.盒须图.饼状图.雷达图开发实例. 在开发过程中我们会使用多各种各样的图 ...
- 项目: ATM+购物车
ATM+购物车 项目文件: 介绍 以下为文件夹层次和内容: readme.md 1. 需求 模拟银行取款 + 购物全过程 1.注册 2.登录 3.提现 4.还款 5.转账 6.查看余额 7.查看购物车 ...
- js导入excel&导出excel
Excel导入 html代码 <button style={{ color: '#1890ff', fontSize: '14px', cursor: 'pointer' }} onClick= ...