Java 8 引入了函数式接口的概念,其中之一是 Supplier
接口。Supplier
接口是一个无参数的函数式接口,它不承受任何输出参数,但能够返回一个后果。它定义了一个名为 get()
的形象办法,用于获取后果。
上面是 Supplier<T> 接口的定义:
@FunctionalInterface
public interface Supplier<T> {T get();
}
在函数式编程中,Supplier
接口罕用于提早计算或惰性求值。它能够用来示意一个供应商或提供者,用于生成或获取数据。当须要获取数据时,能够调用 Supplier
的 get()
办法来获取后果。
应用 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 表达式联合应用,用于提早计算或惰性求值。