@Test
public void testSupplier(){
String str = "str";
String result = process(() -> {
StringJoiner ccc = new StringJoiner("|").add(str).add("ccc");
User user = new User();
user.setName(ccc.toString());
return user;
});
System.out.println(result);
}
private String process(Supplier<? extends Person> supplier){
return supplier.get().toString()+":"+"finished";
}
Supplier接口:
* @param <T> the type of results supplied by this supplier
*
* @since 1.8
*/
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
短短几行代码,可以把supplier用法说清楚了
1. Supplier是一个函数式接口,里面就一个方法 get();
2. get() 方法有返回值,返回Supplier的接收参数类型T
3. Supplier的意思是在程序的上层提供一个方法,传递到下游来供下游的程序使用,比如上面的例子里上游程序在process方法里提供一个方法,然后下游process方法的实现里可以获取该方法的结果,并且可以处理过后再返回给上游
Supplier是Java 8引入的函数式接口,它定义了一个不接受任何参数但返回一个结果的方法`get()`。它常用于延迟执行或惰性计算,即只有在需要时才会执行,并且可以多次获取结果。
以下是一些适合使用Supplier的场景:
1. 延迟加载:当需要一个对象时,但是创建代价较高或不确定是否需要时,可以使用Supplier来延迟加载。只有当需要获取结果时,才会执行Supplier的`get()`方法来创建对象。
2. 惰性计算:当某个计算量较大的操作只需在需要结果时执行一次时,可以使用Supplier来进行惰性计算。只有当需要获取结果时,才会执行Supplier的`get()`方法来执行计算并返回结果。
3. 循环使用:在一些需要多次获取结果的场景,可以使用Supplier来循环提供结果。每次调用Supplier的`get()`方法都会重新计算并返回一个结果。
4. 配置获取:当需要动态获取配置信息或参数时,可以使用Supplier来获取。每次调用Supplier的`get()`方法都可以返回最新的配置信息或参数值。
5. 通用设置:当下游服务需要接收多种类型的数据的时候,可以在下游服务参数使用supplier,然后在上游调用的时候提供具体的数据
总的来说,使用Supplier可以实现一种按需获取结果或延迟执行操作的模式,适用于在需要时才执行计算、创建对象或获取配置的场景。它提供了一种灵活且可复用的方式来处理延迟加载和惰性计算的需求。