java方法引用用::复用已有方法,需签名匹配函数式接口:静态方法(类名::静态方法)、实例方法(对象::方法或类名::方法)、构造器(类名::new)及数组构造器(类型[]::new)。

Java 方法引用用双冒号 :: 把已有方法“借过来”用,代替写一整段 Lambda 表达式,前提是方法签名(参数类型、返回值)和函数式接口抽象方法完全匹配。
静态方法引用:类名::静态方法名
当 Lambda 表达式只是调用一个静态方法,且参数顺序和类型一致时,可以直接引用。
例如:Function<string integer></string> 接口的 apply 方法接收一个 String,返回 Integer,而 Integer.parseInt 正好符合:
// 原写法(Lambda) Function<string integer> f1 = s -> Integer.parseInt(s); // 简化为方法引用 Function<string integer> f2 = Integer::parseInt;</string></string>
- 左边类型(
String)对应方法第一个参数,右边返回值(Integer)对应方法返回值 - 不能写成
Integer::valueOf(它返回Integer,但参数是String→ 成立;不过要注意重载,valueOf(String)是匹配的) - 不带括号,也不写参数名,只写
类名::方法名
实例方法引用:对象::实例方法名 或 类名::实例方法名
分两种情况:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
已有对象 + 实例方法:如
str::length,Lambda 的参数被当作隐式调用者(即str.length()),此时 Lambda 不能有输入参数(或仅剩后续参数) -
类名 + 实例方法:如
String::length,表示“对传入的String对象调用length()”,Lambda 参数就是那个对象本身
例子:
// String::length:参数是 String,调用它的 length(),返回 int ToIntFunction<string> len = String::length; // 等价于 s -> s.length() // 已有对象引用 String prefix = "Hello"; Function<string string> addPrefix = prefix::concat; // 等价于 s -> prefix.concat(s)</string></string>
构造器引用:类名::new
当 Lambda 目的是创建对象,且函数式接口的抽象方法返回类型与构造器所属类一致、参数匹配时,可用 类名::new。
// Supplier 创建无参对象 Supplier<arraylist> listGen = ArrayList::new; // 等价于 () -> new ArrayList() // Function 创建单参对象(如 String 构造器接受 char[]) Function<char string> strFromChars = String::new; // 等价于 c -> new String(c) // BiFunction 创建双参对象(如 BigDecimal(String, MathContext)) BiFunction<string mathcontext bigdecimal> bd = BigDecimal::new;</string></char></arraylist>
- 编译器根据函数式接口方法的参数个数和类型,自动选择对应重载的构造器
- 没有
(),不是new SomeClass(),而是SomeClass::new
数组构造器引用:类型[]::new
专门用于创建数组,等价于接受一个 int 长度参数并返回对应数组的 Lambda。
// IntFunction<int>:输入 int,输出 int[] IntFunction<int> arrayMaker = int[]::new; int[] arr = arrayMaker.apply(5); // 创建长度为 5 的 int[]</int></int>
-
int[]::new匹配IntFunction<int></int>(因为apply(int)返回int[]) - 也可用于泛型数组构造,如
String[]::new对应IntFunction<string></string>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










