All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.core.lang.loader.LazyFunLoader Maven / Gradle / Ivy

Go to download

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

There is a newer version: 5.8.34
Show newest version
package cn.hutool.core.lang.loader;

import cn.hutool.core.lang.Assert;

import java.util.function.Consumer;
import java.util.function.Supplier;

/**
 * 函数式懒加载加载器
* 传入用于生成对象的函数,在对象需要使用时调用生成对象,然后抛弃此生成对象的函数。
* 此加载器常用于对象比较庞大而不一定被使用的情况,用于减少启动时资源占用问题
* 继承自{@link LazyLoader},如何实现多线程安全,由LazyLoader完成。 * * @param 被加载对象类型 * @author Mr.Po * @see cn.hutool.core.lang.loader.LazyLoader * @since 5.6.1 */ public class LazyFunLoader extends LazyLoader { private static final long serialVersionUID = 1L; /** * 用于生成对象的函数 */ private Supplier supplier; /** * 静态工厂方法,提供语义性与编码便利性 * @param supplier 用于生成对象的函数 * @param 对象类型 * @return 函数式懒加载加载器对象 * @since 5.8.0 */ public static LazyFunLoader on(final Supplier supplier) { Assert.notNull(supplier, "supplier must be not null!"); return new LazyFunLoader<>(supplier); } /** * 构造 * * @param supplier 用于生成对象的函数 */ public LazyFunLoader(Supplier supplier) { Assert.notNull(supplier); this.supplier = supplier; } @Override protected T init() { T t = this.supplier.get(); this.supplier = null; return t; } /** * 是否已经初始化 * * @return 是/否 */ public boolean isInitialize() { return this.supplier == null; } /** * 如果已经初始化,就执行传入函数 * * @param consumer 待执行函数 */ public void ifInitialized(Consumer consumer) { Assert.notNull(consumer); // 已经初始化 if (this.isInitialize()) { consumer.accept(this.get()); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy