java中方法引用是复用已有方法的简洁语法,要求函数式接口且签名匹配;分静态(类名::静态方法)、实例(对象::方法或类名::方法)、构造(类名::new)三类。

Java 中 Lambda 表达式的方法引用,本质是用更简洁的写法复用已有方法,代替冗长的 Lambda 体。前提是接口必须是函数式接口(@FunctionalInterface),且被引用方法的签名(参数类型、顺序、返回值)要与函数式接口中抽象方法完全匹配。
静态方法引用
语法:类名::静态方法名
适用于 Lambda 体仅调用一个静态方法,且参数和返回值能对齐。
- 例如:将字符串转整数,函数式接口定义为
Integer strToInt(String s),可直接引用Integer::parseInt - 注意:若接口方法无返回值,而静态方法有返回值,可以接受;但若接口方法有返回值,静态方法必须返回相同类型
实例方法引用(对象已存在)
语法:对象名::实例方法名
适用于已有对象,且该对象的方法符合函数式接口要求。
- 例如:
PrintStream out = System.out;,接口为void print(String s),可写成out::println - 关键点:对象必须在引用前已创建,不能在引用过程中 new
实例方法引用(类型未定,需传参)
语法:类名::实例方法名
此时第一个参数自动作为调用对象,后续参数传给该方法。
- 例如:
String::toLowerCase可用于Function<string string></string>,因为toLowerCase()无参、返回 String,恰好匹配 - 再如:
String::startsWith匹配BiPredicate<string string></string>,第一个 String 是调用者,第二个是参数
构造方法引用
语法:类名::new
用于替代 Lambda 中 new 对象的操作,常见于工厂类或 Stream 的 map、collect 场景。
- 例如:接口为
Supplier<list>></list>,可用ArrayList::new - 支持重载:编译器根据函数式接口抽象方法的参数个数和类型,自动选择对应构造器
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











