Java Lambda方法引用的三类傻瓜式对比

用「大白话+表格+场景案例」的形式整理

📊 三类方法引用「傻瓜式」对比表

类型语法格式核心逻辑(大白话)匹配要求典型场景入门级代码示例
静态方法引用类名::静态方法直接用类的工具方法,不用创建对象接口方法参数/返回值 ↔ 静态方法完全一致数据转换、工具计算Integer::parseInt(字符串转数字)
实例方法引用对象::实例方法用某个具体对象的方法,依赖对象状态接口方法参数/返回值 ↔ 实例方法完全一致对象属性操作、特定对象行为"hello"::toUpperCase(字符串转大写)
类名实例方法引用类名::实例方法把对象当参数传,间接调用实例方法接口方法第一个参数是类实例,后续参数 ↔ 实例方法一致集合批量操作、通用对象处理String::toUpperCase(批量转大写)
构造方法引用类名::new简化new对象,相当于"对象工厂"接口方法参数 ↔ 构造方法参数一致,返回值是类实例创建对象、集合初始化ArrayList::new(创建空集合)

🎯 四类写法「等价转换」案例

以「字符串转大写」为例,看不同写法的对应关系:

// 1. 原始Lambda写法
Function<String, String> lambda = s -> s.toUpperCase();

// 2. 实例方法引用(具体对象)
String str = "test";
Function<String, String> instanceRef = str::toUpperCase; // 注意:这里实际是Supplier<String>更准确,仅作对比

// 3. 类名实例方法引用(最常用)
Function<String, String> classRef = String::toUpperCase;

// 4. 静态方法引用(需要自定义静态方法)
class StringUtils {
    public static String toUpperCase(String s) {
        return s.toUpperCase();
    }
}
Function<String, String> staticRef = StringUtils::toUpperCase;

🚩 入门必懂「踩坑指南」

  1. 匹配错误最常见:比如接口方法有2个参数,却引用了只有1个参数的方法,编译器会直接报错
  2. 实例方法别搞混对象::方法是用已有对象的方法,类名::方法是把对象当参数传进去调用
  3. 构造方法看参数ArrayList::new可以匹配无参构造,也可以匹配int initialCapacity的有参构造,看接口方法的参数
  4. null值要警惕:实例方法引用时,如果对象是null,运行时会抛NullPointerException

🎮 实战练习场景

  1. 集合排序:用Comparator.comparing(String::length)替代Lambda实现按字符串长度排序
  2. 对象创建:用Person::new结合Stream批量创建对象列表
  3. 数据处理:用Arrays::sort对数组进行排序,用Collections::reverse反转集合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值