java方法引用有五种用法:静态方法引用(类名::静态方法)、特定对象的实例方法引用(对象::方法名)、任意对象的实例方法引用(类名::方法名)、构造方法引用(类名::new)和数组构造引用(类型[]::new),核心在于匹配函数式接口的参数与返回类型。

Java 方法引用不是“读”出来的,是用出来、比出来、想明白的。所谓“速成”,关键不在背语法,而在抓住三条主线:谁调用、怎么调、类型对不对。
下面直接说清楚怎么上手最有效:
静态方法引用:类名::方法名
适用于 Lambda 里只干一件事——调某个类的静态方法。
- 要求:Lambda 参数和返回值,必须跟静态方法完全匹配
- 常见例子:
-
Integer::parseInt← 替代s -> Integer.parseInt(s) -
Math::max← 替代(a, b) -> Math.max(a, b)
-
- 注意:不能带括号,也不能传实参,
Integer::parseInt()是错的
特定对象的实例方法引用:对象::方法名
你手里已经有一个对象,想让它来执行它的某个方法。
- 最典型:
System.out::println← 替代s -> System.out.println(s) - 可以是任意已有实例,比如:
StringProcessor p = new StringProcessor(); list.stream().map(p::format); // p 已存在,调它的 format 方法
任意对象的实例方法引用:类名::方法名
这是最容易卡壳的,但它其实最常用——尤其在 Stream 操作中。
- 含义:让“流里的每个元素自己调自己的方法”
- 示例:
list.stream().map(String::length) // 等价于 s -> s.length() list.stream().filter(String::isEmpty) // 等价于 s -> s.isEmpty()
- 关键点:左边是元素类型(如
String),右边是该类型声明的实例方法(如length())
构造方法和数组引用:类名::new / 类型[]::new
-
ArrayList::new← 替代() -> new ArrayList() -
String[]::new← 替代n -> new String[n],常用于Function<integer string></integer>场景
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











