函数式编程
Java 函数式编程:核心思想与实践
函数式编程(Functional Programming)是一种以函数为核心的编程范式,强调不可变数据和无副作用,从根本上解决了并发编程中的数据竞争问题。Java 8 引入 Lambda 表达式和函数式接口,正式支持函数式编程风格,大幅简化了代码并提升了可读性。本文将从核心思想出发,详解 Lambda 表达式、函数式接口、方法引用等关键特性。
函数式编程的核心思想
函数式编程的两大支柱:
- 不可变数据(Immutability)
数据一旦创建就不可修改,任何操作都只会生成新数据,不会改变原始值。这避免了多线程环境下的数据竞争(多个线程同时修改同一数据)。 - 无副作用(No Side Effects)
函数的执行不会影响外部状态(如全局变量、输入参数),相同输入始终产生相同输出。这种 “纯函数” 特性让代码更易测试和推理。
函数式接口:Lambda 表达式的载体
函数式接口是函数式编程的基础,指仅包含一个抽象方法的接口(可包含默认方法或静态方法)。Java 8 提供 @FunctionalInterface 注解用于标记此类接口,编译器会检查其是否符合规范。
// 编译器验证:仅含一个抽象方法
public interface Calculator {
int compute(int a, int b); // 唯一抽象方法
default void printResult(int result) { // 默认方法(允许)
System.out.println("结果:" + result);
}
static void log() { // 静态方法(允许)
System.out.println("计算完成");
}
}
关键:Lambda 表达式本质是函数式接口的匿名实现,简化了接口实现的代码。
Lambda 表达式:简洁的函数实现
Lambda 表达式是函数式接口的简写形式,语法为: