当前位置: 首页 > news >正文

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 里的函数参数。

http://www.cnnetsun.cn/news/107553.html

相关文章:

  • hasattr()函数和getattr()函数
  • Windows系统清理优化神器!支持Win10/11磁盘空间注册表清理,开机自启动项管理、程序应用安装更新卸载,电脑性能优化设置增强!
  • EmotiVoice语音合成日志记录规范:便于调试与审计
  • EmotiVoice语音合成多区域部署架构设计
  • 不常用但超实用!QSpinBox 九大隐藏技巧
  • ChatGPT 说:豆包手机被微信“拒绝”,背后隐藏的是技术与生态的深层冲突
  • C++基础知识点——5个重要位运算技巧(通俗易懂版)
  • ScriptHookV模组开发实战:从入门到精通的完整指南
  • 重磅!AI应用架构师力推的企业虚拟运营方案_副本
  • pose-search:人体动作分析与姿态搜索终极指南
  • 终极隐私保护方案:用Buzz实现完全离线的语音转文字
  • DTLN实时降噪技术:用AI算法打造纯净语音体验的完整指南
  • 移动端视频录制技术革新:基于MediaRecorder的高性能解决方案
  • EmotiVoice与RVC的区别是什么?一文讲清两者定位差异
  • EmotiVoice语音合成中断怎么办?常见错误排查
  • ComfyUI-SeedVR2视频超分插件完整安装与配置指南
  • 开源TTS新星崛起:EmotiVoice为何备受开发者青睐?
  • 记录Kibana多实例竞争导致的迁移锁
  • PySlowFast混合精度训练终极技巧:快速突破视频模型性能瓶颈的完整解决方案
  • 多肽合成丨HNGS14G CAS号: 330936-70-4
  • 43、Linux 网络安全:防火墙与认证机制深度解析(上)
  • 44、一次性密码与安全外壳:保障系统安全登录的有效手段
  • PostgreSQL pgvector扩展:向量相似性搜索的终极实践指南
  • 50、Linux系统安装与磁盘分区全攻略
  • 27、Linux 路由软件配置指南
  • KISS FFT轻量级信号处理终极指南:从入门到精通
  • 快速掌握X-AnyLabeling:GeCO模型在目标计数中的完整实践指南
  • Mac M1芯片运行EmotiVoice性能表现如何?
  • 如何快速构建Next.js多租户认证系统:终极完整指南
  • 计算机Java毕设实战-基于JAVA的北京市公交管理系统基于Java的城市公交查询管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】