方法引用是lambda的简化写法,需满足已有方法签名与函数式接口抽象方法完全匹配;分三类:对象::实例方法、类::静态方法、类::实例方法(首参为调用者);结合consumer、supplier等接口及stream实战强化理解。

方法引用不是靠死记硬背的,而是靠理解三类语法结构和对应场景,再结合常见接口(比如 Consumer、Function、Supplier、Predicate)去匹配使用。背思维导图前,先厘清逻辑关系,图就自然成型了。
搞懂三类引用形式的本质
方法引用本质是 Lambda 的简化写法,只在“已有方法能直接适配函数式接口抽象方法签名”时才可用。记住三类写法及其触发条件:
-
对象 :: 实例方法:前提是实例已存在,且该实例方法参数个数、类型、返回值与函数式接口方法一致。例如
str::length可用于Function<string integer></string> -
类 :: 静态方法:静态方法本身独立于对象,参数列表需完全匹配接口抽象方法。例如
Integer::parseInt对应Function<string integer></string> -
类 :: 实例方法(特殊情形):当第一个参数是调用对象,后续参数传给该方法时适用。例如
String::compareToIgnoreCase可用于BiFunction<string string integer></string>—— 第一个String是调用者,第二个是入参
绑定常用函数式接口记忆
不记孤立语法,而是把方法引用和典型接口绑定记忆,形成“接口 → 常见引用示例”映射:
-
Consumer<t></t>(消费型)→System.out::println、list::add -
Supplier<t></t>(供给型)→ArrayList::new、LocalDateTime::now -
Function<t></t>(转换型)→String::toUpperCase、Integer::valueOf -
Predicate<t></t>(判断型)→String::isEmpty、Objects::nonNull
用 Stream 场景强化印象
在真实链式调用中反复接触,比纯背图更有效。比如这些高频组合:
list.stream().map(String::trim).filter(String::isBlank).forEach(System.out::println)stream.sorted(String::compareToIgnoreCase)Optional.of("123").map(Integer::parseInt).orElse(0)
每写一次,就强化一次“谁在调用、参数怎么来、返回什么”的直觉。
画一张极简手绘图辅助回忆
不用追求完整思维导图,自己画一张中心为「方法引用」的四分支草图即可:
- 左上:对象::实例方法(标例:
obj::toString) - 右上:类::静态方法(标例:
Math::abs) - 左下:类::实例方法(标例:
String::compareTo) - 右下:构造器引用(
ArrayList::new)和数组引用(int[]::new)
旁边标注一句口诀:“谁调谁、参数对、返回合”,比背几十个节点更管用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











