news 2025/12/31 20:59:02

Java 的“高阶函数”到底是什么:Runnable / Callable 就是函数参数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 的“高阶函数”到底是什么:Runnable / Callable 就是函数参数

在很多函数式语言(如 Kotlin、Scala、JavaScript)里,“高阶函数”指的是:

函数可以作为参数传递,或者作为返回值返回的函数。

而很多 Java 工程师会说:

“Java 又不是函数式语言,哪来的高阶函数?”

其实这是一种表象误解

1. 从“思想”上看:Java 早就支持高阶函数

看这段线程池代码:

pool.submit(() -> this.loadUser());

你传给submit的是什么?

  • 不是数据

  • 不是配置

  • 而是一段“可执行的行为”

这和函数式语言里的:

submit { loadUser() }

思想层面完全一致

你把“怎么做”当成参数传进去了。

2. Java 为什么不用“函数”,而用 Runnable / Callable?

因为 Java 不是用“函数值”,而是用对象来承载行为。

Callable<T>为例:

@FunctionalInterface public interface Callable<V> { V call() throws Exception; }

当你写:

() -> this.loadUser()

编译器会把它自动转换成一个Callable<User>实例。

也就是说:

lambda / 方法引用 ≠ 裸函数
而是:实现了某个“函数式接口”的对象

这就是 Java 的设计取舍。

3. submit 为什么天然就是“高阶函数”?

再看submit的签名:

<T> Future<T> submit(Callable<T> task);

这在函数式语言里的等价表达是:

“submit 接收一个函数 task,并在未来某个时刻调用它,得到结果。”

所以你完全可以这样理解:

  • submit= 高阶函数

  • Callable/Runnable= 函数参数

  • 线程池 = 执行函数的调度器

4. 方法引用只是“语法糖”

pool.submit(this::loadUser);

等价于:

pool.submit(() -> this.loadUser());

只是把:

  • “定义一个函数”
  • “传入函数”

写得更简洁而已。

5. 为什么 Java 要用“接口”而不是“函数类型”?

这是 Java 的工程取向:

  • 接口有类型系统(可读、可约束)

  • 接口能声明异常(Callable vs Runnable)

  • 接口能作为API 契约

  • 接口能向后兼容

所以 Java 的高阶函数是:

“用接口承载行为,用 lambda 作为实现”

6. 一句话总结

Java 的高阶函数,并不是“函数作为参数”,
而是“把行为封装成函数式接口对象,再作为参数传递”。
Runnable / Callable 本质上就是 Java 里的函数参数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/26 22:04:25

hasattr()函数和getattr()函数

hasattr()函数 hasattr() 是 Python 的内置函数&#xff0c;用于检查对象是否具有指定名称的属性&#xff08;或方法&#xff09;。 语法&#xff1a; hasattr(object, name) 参数&#xff1a; object&#xff1a;要检查的对象。name&#xff1a;字符串&#xff0c;表示要检查的…

作者头像 李华
网站建设 2025/12/28 12:10:44

Windows系统清理优化神器!支持Win10/11磁盘空间注册表清理,开机自启动项管理、程序应用安装更新卸载,电脑性能优化设置增强!

下载&#xff1a;https://tool.nineya.com/s/1jbp5vf11 这可不是普通的清理软件&#xff0c;而是集清理、优化、加速于一体的全能型选手&#xff0c;能帮你把电脑收拾得明明白白&#xff0c;运行速度直接起飞&#xff01; 首先说说它的 “清理能力”。这软件能彻底卸载那些你不…

作者头像 李华
网站建设 2025/12/26 6:50:12

EmotiVoice语音合成日志记录规范:便于调试与审计

EmotiVoice语音合成日志记录规范&#xff1a;便于调试与审计 在当前AI驱动的语音交互场景中&#xff0c;用户早已不再满足于“能说话”的机器声音。从智能客服到虚拟主播&#xff0c;从有声读物到游戏NPC&#xff0c;人们期待的是富有情感、自然流畅、甚至具备个性辨识度的语音…

作者头像 李华
网站建设 2025/12/28 10:57:59

EmotiVoice语音合成多区域部署架构设计

EmotiVoice语音合成多区域部署架构设计 在今天的智能服务生态中&#xff0c;用户对语音交互的期待早已超越“能听清”这一基本要求。无论是虚拟偶像的一句带笑哽咽&#xff0c;还是客服机器人在安抚客户时流露出的温和语调&#xff0c;背后都离不开高表现力语音合成技术的进步。…

作者头像 李华
网站建设 2025/12/30 6:38:47

不常用但超实用!QSpinBox 九大隐藏技巧

今天和大家分享一些 Qt 中 QSpinBox 控件的高级功能。这些功能不仅能让你的应用界面更加灵活&#xff0c;还能提升用户体验&#xff0c;尤其是在处理数值输入和界面交互时。虽然 QSpinBox 是一个常见的控件&#xff0c;大家经常用它来处理整数的输入&#xff0c;但它其实还有很…

作者头像 李华