Java 中方法引用怎么在 Lambda 中进行参数规约

星枫吖_7713

星枫吖_7713

2026-07-07

716人浏览

原创

方法引用通过编译器自动匹配函数式接口抽象方法签名与目标方法的参数个数、类型和顺序实现参数隐式传递:静态引用一对一映射;特定对象实例引用固定调用者后传剩余参数;任意对象实例引用将首个参数作为调用者;构造引用直接映射参数到构造器。

java 中方法引用怎么在 lambda 中进行参数规约

方法引用在 Lambda 中实现参数规约,本质是编译器根据函数式接口的抽象方法签名,自动匹配目标方法的参数个数、类型和顺序,从而省去显式写出参数的过程。它不是“减少参数”,而是让参数传递逻辑隐式化、结构化。

静态方法引用:参数完全一对一映射

当使用 类名::静态方法名 时,Lambda 的每个参数会按顺序原样传给静态方法——参数数量、类型、顺序必须严格一致。

  • 示例:Comparator comp = String::compareToIgnoreCase;
    对应函数式接口抽象方法为 int compare(String s1, String s2),而 String.compareToIgnoreCase(String) 接收一个参数,但这里实际是“将第一个参数作为调用者,第二个作为入参”——这是实例方法引用的规则,不是静态引用。真正静态引用如:Math::max 对应 (int a, int b) -> Math.max(a, b),两个参数直接传入。
  • 关键点:静态方法本身不依赖对象状态,所以 Lambda 参数列表就是它的全部入参,无隐藏参数。

特定对象的实例方法引用:固定调用者 + 剩余参数传入

使用 对象实例::实例方法名 时,“对象实例”已确定,Lambda 的参数只负责传给该方法的其余参数(即去掉“调用者”后的参数)。

java-enterprise
java-enterprise

Java企业开发专家,专注于Spring Boot、微服务架构和JVM优化。适用于:Java语言掌握、

下载
  • 示例:StringBuilder sb = new StringBuilder();
    Function appender = sb::append;
    调用 appender.apply("hello") 等价于 sb.append("hello")。
    函数式接口 R apply(T t) 只有一个参数,它被直接传给 append(String),而 sb 是固定的接收者。
  • 注意:该对象必须在引用时已存在且非 null,否则运行时报 NullPointerException。

任意对象的实例方法引用:首个参数自动作为调用者

使用 类名::实例方法名(如 String::length)时,编译器把 Lambda 的第一个参数当作方法调用的目标对象,其余参数(如有)才传给方法本身。

  • 示例:Function len = String::length;
    等价于 s -> s.length()。Lambda 参数 s 自动成为 length() 的调用者,方法本身无入参,所以只消耗一个参数。
  • 再如:BiFunction compare = String::compareTo;
    等价于 (s1, s2) -> s1.compareTo(s2)。第一个参数 s1 是调用者,第二个 s2 是 compareTo 的入参。
  • 这是参数规约最易混淆的地方:表面看方法定义无参数(如 length()),但它依赖一个隐式接收者,而这个接收者由 Lambda 的第一个参数提供。

构造方法引用:参数直接用于 new 实例

使用 类名::new 时,Lambda 参数全部用于构造器调用,参数个数和类型必须与某一个构造器完全匹配。

  • 示例:Supplier supplier = ArrayList::new;
    对应无参构造器,Lambda 无需参数(() -> new ArrayList())。
  • Function withCapacity = ArrayList::new;
    对应 ArrayList(int) 构造器,Lambda 接收一个 Integer 参数并传入。
  • 没有“规约”动作,只是参数到构造器的直连映射。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

java

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10677

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7802

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6792

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1144

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

948

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1396

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2809

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20111

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1235

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习