java 中的 Supplier 接口
在 Java 中,Supplier
是一个功能性接口,它来自于 java.util.function
包。Supplier
接口代表一个提供结果的供应商,它不接受任何参数,但返回一个结果。常用于延迟计算、工厂模式和其他场景。
以下是 Supplier
的简单解释和用法示例:
Supplier 接口的定义
@FunctionalInterface public interface Supplier<T> { T get(); }
Supplier
接口只有一个抽象方法 get()
,它不接受任何参数,但会返回一个类型为 T
的对象。
Supplier 的典型用法
- 延迟计算:当你希望某个值在需要的时候才进行计算。
- 工厂模式:通过
Supplier
提供实例化对象的方式。
使用示例
1. 基本用法
以下是一个简单的例子,展示如何使用 Supplier
来提供一个字符串:
import java.util.function.Supplier; public class SupplierExample { public static void main(String[] args) { Supplier<String> stringSupplier = () -> "Hello, World!"; System.out.println(stringSupplier.get()); // 输出: Hello, World! } }
2. 延迟计算
使用 Supplier
可以实现延迟计算,这在需要惰性加载(Lazy Loading)的场景中特别有用:
import java.util.function.Supplier; public class LazyLoadingExample { public static void main(String[] args) { Supplier<Double> randomSupplier = () -> Math.random(); System.out.println("Random value: " + randomSupplier.get()); } }
3. 与其他 API 结合
在 Java 8 中,许多新的 API 方法都接受 Supplier
参数。例如,Optional.orElseGet()
方法接受一个 Supplier
来提供默认值:
import java.util.Optional; public class OptionalExample { public static void main(String[] args) { Optional<String> optional = Optional.empty(); System.out.println(optional.orElseGet(() -> "Default Value")); // 输出: Default Value } }
4. 自定义工厂方法
使用 Supplier
可以实现工厂方法模式,创建不同类型的对象:
import java.util.function.Supplier; class Car { private String name; public Car(String name) { this.name = name; } @Override public String toString() { return "Car{name='" + name + "'}"; } } public class FactoryExample { public static void main(String[] args) { Supplier<Car> carFactory = () -> new Car("Tesla"); Car car = carFactory.get(); System.out.println(car); // 输出: Car{name='Tesla'} } }
总结
Supplier
是一个简单而强大的功能性接口,广泛用于延迟计算、惰性加载和工厂模式。通过使用 Supplier
,可以使代码更加简洁、灵活和易于维护。