函数式接口是 Java 8 引入的一种特殊类型的接口,它只包含一个抽象方法。函数式接口可以被当作函数类型使用,可以用 Lambda 表达式实例化,也可以通过方法引用来表示。
特征和用途
-
单一抽象方法:
函数式接口只能有一个抽象方法,但可以有默认方法(default method)和静态方法(static method)。 -
Lambda 表达式:
函数式接口可以使用 Lambda 表达式实例化,Lambda 表达式提供了一种简洁的语法来表示函数接口的实现。 -
方法引用:
可以使用方法引用(method reference)来创建函数式接口的实例,方法引用提供了对现有方法的引用,可以简化代码。 -
注解
@FunctionalInterface
:
@FunctionalInterface
是一个可选的注解,用于标识函数式接口,编译器会检查该接口是否符合函数式接口的定义。
示例
下面是一个简单的函数式接口及其使用示例:
@FunctionalInterface
interface Calculator {
int calculate(int a, int b);
}
public class FunctionalInterfaceExample {
public static void main(String[] args) {
// 使用 Lambda 表达式实例化函数式接口
Calculator addition = (a, b) -> a + b;
Calculator subtraction = (a, b) -> a - b;
// 调用函数式接口的方法
int result1 = addition.calculate(10, 5); // result1 = 15
int result2 = subtraction.calculate(10, 5); // result2 = 5
System.out.println("Addition result: " + result1);
System.out.println("Subtraction result: " + result2);
}
}
在上面的示例中:
Calculator
是一个函数式接口,它定义了一个抽象方法calculate(int a, int b)
,用于计算两个整数的结果。- 使用
@FunctionalInterface
注解标识Calculator
接口是一个函数式接口。 - 在
main
方法中,通过 Lambda 表达式实例化了Calculator
接口的两个实例addition
和subtraction
,分别表示加法和减法操作。 - Lambda 表达式
(a, b) -> a + b
和(a, b) -> a - b
分别实现了calculate
方法的加法和减法逻辑。 - 调用
calculate
方法来进行计算并输出结果。
函数式接口的引入使得 Java 8 开始支持函数式编程的特性,使得代码更加简洁和易于理解,特别是在处理回调和并发编程等场景下有很大的帮助。函数式接口的应用在 Java 中广泛用于 Stream API、Lambda 表达式等功能。