最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java 中方法引用怎样简化代码结构与流程
时间:2026-07-11 09:36:52 编辑:袖梨 来源:一聚教程网
方法引用通过复用已有方法替代单方法调用的Lambda表达式,使代码更简洁、意图更明确,分为静态、绑定实例、未绑定实例和构造器四类,严格匹配函数式接口签名,不可添加额外逻辑。
方法引用通过复用已有方法替代冗长的 Lambda 表达式,直接让代码更短、意图更明确。它不新增逻辑,而是把“调用什么方法”这件事表达得更直白。
替换单方法调用的 Lambda
当 Lambda 体只做一件事:调用一个已有方法,且参数和返回值完全匹配,就可直接替换。
-
原来写法:
list.forEach(item -> System.out.println(item)) -
方法引用:
list.forEach(System.out::println) -
排序简化:
list.sort((a, b) -> a.compareTo(b))→list.sort(String::compareTo) -
转换操作:
stream.map(s -> s.toUpperCase())→stream.map(String::toUpperCase)
四类引用精准对应不同场景
不是所有方法都能随便引用,必须看目标函数式接口的抽象方法签名(参数个数、类型顺序、返回值)是否与被引用方法一致。
-
静态方法引用:
Integer::parseInt(对应Function<String, Integer>) -
绑定实例方法:
str::length(str是确定对象,对应Supplier<Integer>) -
未绑定实例方法:
String::length(接收一个String参数并调用其length(),对应Function<String, Integer>) -
构造器引用:
ArrayList::new(对应Supplier<List>或Function<Integer, List>等)
流处理中自然降低嵌套与重复
在 Stream 链式调用中,方法引用让每一步操作语义清晰,避免层层包裹的箭头函数。
立即学习“Java免费学习笔记(深入)”;
- 过滤 + 映射组合:
list.stream().filter(Objects::nonNull).map(String::trim).collect(toList()) - 异常抛出简化:
optional.orElseThrow(() -> new IllegalArgumentException("empty"))→ 若有throwIfEmpty()方法,可写为optional.orElseThrow(this::throwIfEmpty) - 自定义比较器:
people.stream().sorted(Comparator.comparing(Person::getName)),比写完整 Lambda 更易读
注意边界:不能加逻辑,也不能改参数
方法引用是“原样委托”,不支持中间加工。一旦需要额外处理,就得退回 Lambda 或封装新方法。
- ❌ 错误尝试:
s -> "ID_" + s.toUpperCase()无法用String::toUpperCase直接替代 - ✅ 正确做法:提取成独立方法
static String formatId(String s) { return "ID_" + s.toUpperCase(); },再引用MyClass::formatId - ⚠️ 类型不匹配时编译失败,比如用
String::length赋给Consumer<String>就会报错(返回int,但Consumer要求无返回)
相关文章
- 龙岛异兽起源神秘图腾解锁方式-龙岛异兽起源神秘图腾解锁方法 07-20
- 苍蓝前线格奈森瑙强度如何-苍蓝前线格奈森瑙强度怎样 07-20
- 出发吧麦芬学者风暴之主养成攻略 07-20
- 英雄冒险团全部传家宝获取方法汇总 07-20
- 王者万象棋新手入门指引 王者万象棋零基础快速上手教程 07-20
- 检疫区最后一站金色收集品怎么获得 隐藏收集品获得方法介绍 07-20