suppliers

为什么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);
}
阅读 1.9k
1 个回答

因为不调用get方法,里面的逻辑不会执行,所以是懒加载

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏