supplier 是 java 8 引入的无参有返回值函数式接口,核心方法为 get(),适用于对象创建、延迟计算、随机值生成等场景,不接受参数、不抛受检异常,多次调用 get() 会重复执行逻辑。

Supplier 是 Java 8 引入的函数式接口,专门用于“无参、有返回值”的场景,核心方法是 get()。
Supplier 的基本用法
它不接收任何参数,只通过 get() 方法返回一个结果。适合封装对象创建逻辑、延迟计算、随机值生成等。
- 定义方式:使用 lambda 表达式或方法引用
- 调用方式:直接调用
supplier.get() - 典型用途:替代无参构造、避免重复 new、解耦对象获取逻辑
常见写法示例
✅ 正确写法(无参,返回 String):
SupplierString result = supplier.get(); // 返回 "Hello"
✅ 创建新对象(每次调用都新建):
ArrayList
ArrayList
✅ 延迟读取配置或计算(避免提前执行):
Supplierint n1 = randomSupplier.get(); // 第一次调用
int n2 = randomSupplier.get(); // 第二次调用,结果可能不同
注意点
- Supplier 不接受参数,所以不能写成
() -> doSomething(x)并在外部传 x(x 必须在 lambda 内可访问,比如是 final 局部变量或成员变量) - 如果需要传参,应改用
Function<t r></t>或BiFunction等其他接口 - get() 方法可能被多次调用,若需“只计算一次”,应配合
Optional或缓存逻辑(如用 AtomicReference 实现懒加载)
和类似接口的区别
对比 Callable<r></r>:Supplier 不抛受检异常,也不运行在线程中;Callable 的 call() 方法可抛 Exception,常用于多线程任务。
对比 Runnable:Runnable 无返回值;Supplier 必须有返回值。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











