1. 基本知识
@FunctionalInterface
是 Java 8 引入的一个注解,用于标记一个接口为函数式接口
函数式接口是只包含一个抽象方法的接口,可以有多个默认方法或静态方法,通常用于 lambda 表达式和方法引用
- 标记接口为函数式接口,明确接口的设计意图,使代码更易读,便于他人理解接口的用途
- 编译器会确保被标记的接口只有一个抽象方法。如果接口有多于一个抽象方法,编译器会报错,从而避免接口被错误地使用
2. Demo
基本的使用法则如下:
定义函数式接口以及使用lambda
@FunctionalInterface
interface MyFunctionalInterface {
void myMethod();
}
public class FunctionalInterfaceDemo {
public static void main(String[] args) {
MyFunctionalInterface func = () -> System.out.println("Hello, Functional Interface!");
func.myMethod();
}
}
多个默认方法和静态方法
@FunctionalInterface
interface MyFunctionalInterface {
void myMethod();
// 默认方法
default void defaultMethod() {
System.out.println("This is a default method.");
}
// 静态方法
static void staticMethod() {
System.out.println("This is a static method.");
}
}
public class FunctionalInterfaceDemo {
public static void main(String[] args) {
MyFunctionalInterface func = () -> System.out.println("Hello, Functional Interface!");
func.myMethod();
func.defaultMethod();
MyFunctionalInterface.staticMethod();
}
}
为了进一步说明此注解的主要性:(编译检查)
加上注解:
给一个实际的Demo例子如下:
// 定义函数式接口
@FunctionalInterface
interface CorrectFunctionalInterface {
void singleMethod();
// 可以有默认方法
default void defaultMethod() {
System.out.println("This is a default method.");
}
// 可以有静态方法
static void staticMethod() {
System.out.println("This is a static method.");
}
}
// 具体使用
public class FunctionalInterfaceDemo {
public static void main(String[] args) {
// 使用 lambda 表达式实现 singleMethod
CorrectFunctionalInterface func = () -> System.out.println("Hello from singleMethod!");
// 调用 singleMethod
func.singleMethod();
// 调用默认方法
func.defaultMethod();
// 调用静态方法
CorrectFunctionalInterface.staticMethod();
}
}
截图如下: