好的!下面给你整理一份关于 Java 8 中的 Supplier 接口及函数式接口 的总结,帮你快速理解和掌握核心概念和用法。


Java 8 学习之 Supplier 与函数式接口总结


一、什么是函数式接口(Functional Interface)

  • 定义:只包含一个抽象方法的接口,称为函数式接口。
  • 特点
    • 可以隐式转换为 lambda 表达式
    • 使用 @FunctionalInterface 注解可以明确标识接口为函数式接口(非必需,但推荐)
@FunctionalInterface
public interface MyFunctionalInterface {
    void execute();
}
  • Java 8 标准库中有很多函数式接口,位于 java.util.function 包中。

二、Supplier 接口简介

  • 接口定义
@FunctionalInterface
public interface Supplier<T> {
    T get();
}
  • 作用:无输入参数,提供一个结果。
  • 通俗理解:提供者、生产者,不接受参数,返回一个指定类型的结果。

三、Supplier 的典型用法

1. 生成对象或数据

Supplier<String> supplier = () -> "Hello World";
System.out.println(supplier.get());  // 输出:Hello World

2. 延迟执行或懒加载

public String getConfig(Supplier<String> supplier) {
    // 只有在真正需要时才调用 supplier.get()
    return supplier.get();
}

String config = getConfig(() -> loadConfigFromFile());

四、常见函数式接口概览

接口名方法签名参数返回值用途说明
Supplier<T>T get()T生产数据,无输入
Consumer<T>void accept(T t)T消费数据,无返回
Function<T,R>R apply(T t)TR输入 T,返回 R
Predicate<T>boolean test(T t)Tboolean判断条件,返回布尔值
UnaryOperator<T>T apply(T t)TT输入输出同类型的函数
BinaryOperator<T>T apply(T t1, T t2)T, TT两个同类型输入,输出同类型

五、代码示例 — Supplier 实战

import java.util.function.Supplier;

public class SupplierExample {
    public static void main(String[] args) {
        // 创建 Supplier,生成随机数
        Supplier<Double> randomSupplier = () -> Math.random();

        System.out.println("随机数1: " + randomSupplier.get());
        System.out.println("随机数2: " + randomSupplier.get());

        // 延迟创建对象
        Supplier<Person> personSupplier = () -> new Person("张三", 25);
        Person p = personSupplier.get();
        System.out.println(p);
    }
}

class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return name + "," + age + "岁";
    }
}

六、总结

  • Supplier<T> 是无参有返回值的函数式接口,适合懒加载、生成数据、延迟执行。
  • Java 8 标准库中包含丰富的函数式接口,配合 lambda 表达式极大提高代码简洁度和可读性。
  • 结合 Stream API、Optional 等常用工具,函数式接口发挥强大威力。