[Java] 函数式接口

名词解释:

函数式接口(Functional Interface)是Java 8引入的概念,指有且仅有一个抽象方法的接口(可以包含多个默认方法或静态方法)。@FunctionalInterface注解用于标识这样的接口,它虽然不是强制性的,但可以帮助编译器检查接口是否符合函数式接口的定义。

声明

  • 唯一的抽象方法;
  • 可以有默认方法和静态方法;
@FunctionalInterface
interface MyFunctionalInterface {
    // 唯一的抽象方法
    void execute(String message);
    
    // 可以有默认方法
    default void defaultMethod() {
        System.out.println("This is a default method.");
    }
    
    // 可以有静态方法
    static void staticMethod() {
        System.out.println("This is a static method.");
    }
}

实现

  1. Lambda表达式:
public class FunctionalInterfaceExample {
    public static void main(String[] args) {
        // 使用Lambda表达式实现函数式接口
        MyFunctionalInterface func = (message) -> System.out.println("Message: " + message);
        
        func.execute("Hello, Functional Interface!");
        func.defaultMethod();
        MyFunctionalInterface.staticMethod();
    }
}
  1. 使用方法引用:
public class MethodReferenceExample {
    public static void printMessage(String message) {
        System.out.println("Printed: " + message);
    }
    
    public static void main(String[] args) {
        // 使用方法引用实现函数式接口
        MyFunctionalInterface func = MethodReferenceExample::printMessage;
        
        func.execute("Hello from method reference!");
    }
}
  1. 匿名内部类(不推荐)
public class AnonymousClassExample {
    public static void main(String[] args) {
        // 使用匿名内部类实现
        MyFunctionalInterface func = new MyFunctionalInterface() {
            @Override
            public void execute(String message) {
                System.out.println("Anonymous class says: " + message);
            }
        };
        
        func.execute("Hello from anonymous class!");
    }
}

Java内置的函数式接口:

  • Function<T, R> - 接受一个输入参数T,返回结果R
  • Predicate - 接受一个输入参数T,返回boolean
  • Consumer - 接受一个输入参数T,无返回
  • Supplier - 无输入参数,返回一个结果T
  • BiFunction<T, U, R> - 接受两个输入参数T和U,返回结果R

特性分析:

  • 主要可以能简化代码,提高可读性,与 Lambda 表达式、方法引用、回调机制等特性配合使用;
posted on 2025-04-25 11:05  流沙何  阅读(16)  评论(0)    收藏  举报