为什么java函数式接口中的suppliers是延迟加载?java中除了静态类中的一些方法是初始化就会加载外,其他的不都是延迟加载吗,不都是调用方法的时候才执行吗,其他的函数式接口不也是调用的时候执行吗,唯一区别不就是suppliers不需要参数吗
先写suppliers的例子
@Test
public void testSuppliers() {
Supplier<Double> lazyValue = () ->{
Uninterruptibles.sleepUninterruptibly(1000, TimeUnit.MILLISECONDS);
return 9d;
};
double valueSquared = squareLazy(lazyValue);
assertEquals(valueSquared,81d);
}
public double squareLazy(Supplier<Double> lazyValue) {
return Math.pow(lazyValue.get(), 2);
}
再写function的例子:
@Test
public void testFunctions() {
Function<Double,Double> function = (d) ->{
Uninterruptibles.sleepUninterruptibly(1000, TimeUnit.MILLISECONDS);
return d;
};
double valueSquared = squareLazyByFunction(function);
assertEquals(valueSquared,81d);
}
public double squareLazyByFunction(Function<Double,Double> function) {
return Math.pow(function.apply(9d), 2);
}
因为不调用
get
方法,里面的逻辑不会执行,所以是懒加载