方法引用在函数式组合中提升链式调用的自然性与可读性,需赋值为函数接口类型后才能使用andThen、compose等组合方法,支持静态、实例、类名引用及构造器引用四种形式。

方法引用在函数式组合中不是“额外加功能”,而是让已有函数接口的链式调用更自然、更可读。它本身不提供组合能力,但能无缝嵌入 Function、Consumer、Predicate 等接口的 andThen、compose、negate 等默认方法中,前提是被引用的方法签名与组合逻辑匹配。
静态方法引用参与组合
当两个静态方法分别承担“转换”和“再转换”角色时,可用 compose 或 andThen 串联:
Function<string integer> parse = Integer::parseInt;</string>Function<integer string> toString = Object::toString;</integer>Function<string string> parseAndToString = parse.andThen(toString);</string>- 调用
parseAndToString.apply("42")→ 返回"42"
注意:不能写成 Integer::parseInt.andThen(Object::toString),因为方法引用本身不是对象实例;必须先赋值给 Function 类型变量,再调用组合方法。
实例方法引用绑定后参与组合
对特定对象的方法引用(如 formatter::format)可作为完整函数单元参与组合:
立即学习“Java免费学习笔记(深入)”;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");Function<localdate string> format = formatter::format;</localdate>Function<string boolean> isLong = s -> s.length() > 8;</string>Function<localdate boolean> formatAndCheckLength = format.andThen(isLong);</localdate>
这里 formatter::format 是一个闭合的函数,接收 LocalDate,返回 String,正好适配 andThen 的输入要求。
类名引用实例方法 + 组合的典型场景
像 String::toLowerCase 这类“类名::实例方法”引用,本质是 (String s) -> s.toLowerCase(),适合用于 Function<string string></string> 链:
Function<string string> toLower = String::toLowerCase;</string>Function<string string> trim = String::trim;</string>Function<string string> clean = trim.andThen(toLower);</string>-
clean.apply(" HELLO ")→"hello"
这种写法比 s -> s.trim().toLowerCase() 更清晰地表达了“先裁边、再转小写”的两步意图,且便于单独测试或复用其中任一环节。
构造方法引用在组合中的间接应用
构造器引用(如 Person::new)本身不直接组合,但可作为下游函数的“终点”:
Function<string integer> parseAge = Integer::parseInt;</string>Function<integer person> createPerson = Person::new;</integer>Function<string person> buildPerson = parseAge.andThen(createPerson);</string>
前提是 Person 有单参构造器 Person(int age)。此时组合链从字符串开始,经解析、构造,最终产出对象,逻辑分层明确。


















