👨🏻‍💻 编程

java 中的 Supplier 接口

在 Java 中,Supplier 是一个功能性接口,它来自于 java.util.function 包。Supplier 接口代表一个提供结果的供应商,它不接受任何参数,但返回一个结果。常用于延迟计算、工厂模式和其他场景。

以下是 Supplier 的简单解释和用法示例:

Supplier 接口的定义

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

Supplier 接口只有一个抽象方法 get(),它不接受任何参数,但会返回一个类型为 T 的对象。

Supplier 的典型用法

  1. 延迟计算:当你希望某个值在需要的时候才进行计算。
  2. 工厂模式:通过 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,可以使代码更加简洁、灵活和易于维护。

留言

您的邮箱地址不会被公开。 必填项已用 * 标注