cn.hutool.core.lang.loader.LazyFunLoader Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hutool-all Show documentation
Show all versions of hutool-all Show documentation
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
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