Java 8引入了函数式接口 Supplier 是一个无参数的函数式接口,它不接受任何输入参数,但可以返回一个结果。它定义了一个名为 get() 的抽象方法,用于获取结果。


下面是Supplier<T>接口的定义:

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

在函数式编程中, Supplier 接口常用于延迟计算或惰性求值。它可以用来表示一个供应商或提供者,用于生成或获取数据。当需要获取数据时,可以调用 Supplierget() 方法来获取结果。

使用 Supplier 接口的主要优势之一是它可以与Java 8的新特性lambda表达式结合使用。通过lambda表达式,可以以更简洁和易读的方式定义 Supplier 对象。

下面是一个使用Supplier接口的示例:

import java.util.function.Supplier;

public class SupplierExample {
    public static void main(String[] args) {
        // 使用lambda表达式创建Supplier对象
        Supplier<String> supplier = () -> "你好,世界!";
        String result = supplier.get();
        // 调用get()方法获取结果
        System.out.println(result);
    }
}
// 输出:你好,世界!

在上面的示例中,我们使用lambda表达式创建了一个返回字符串"Hello, World!"的 Supplier 对象。然后,我们调用了 get() 方法来获取结果,并将其打印到控制台上。

除了简单的返回固定值之外, Supplier 接口还可以用于生成随机数、读取文件、从数据库中获取数据等各种场景。通过实现 Supplier 接口的自定义类,我们可以根据具体需求来生成或获取数据。


以下是其他常见用法示例:

1. 提供随机数生成器:

Supplier<Integer> randomGenerator = () -> new Random().nextInt();
int randomNumber = randomGenerator.get();

2. 延迟加载资源:

Supplier<DatabaseConnection> connectionSupplier = () -> new DatabaseConnection();
DatabaseConnection connection = connectionSupplier.get();

3. 惰性初始化对象:

Supplier<ExpensiveObject> lazyInitializer = ExpensiveObject::new;
ExpensiveObject object = lazyInitializer.get();

总结一下,Java 8的函数式接口 Supplier 用于表示一个供应商或提供者,它不接受任何输入参数,但可以返回一个结果。它可以与lambda表达式结合使用,用于延迟计算或惰性求值。


今夜有点儿凉
40 声望3 粉丝

今夜有点儿凉,乌云遮住了月亮。