Merge pull request #2207 from kingeryq/v5-dev

feat(LazyFunLoader): 增加静态工厂方法
This commit is contained in:
Golden Looly 2022-03-22 08:43:57 +08:00 committed by GitHub
commit 37faf6d27b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 0 deletions

View File

@ -24,6 +24,17 @@ public class LazyFunLoader<T> extends LazyLoader<T> {
*/
private Supplier<T> supplier;
/**
* 静态工厂方法提供语义性与编码便利性
* @param supplier 用于生成对象的函数
* @param <T> 对象类型
* @return 函数式懒加载加载器对象
*/
public static <T> LazyFunLoader<T> onLoad(final Supplier<T> supplier) {
Assert.notNull(supplier, "supplier");
return new LazyFunLoader<>(supplier);
}
/**
* 构造
*

View File

@ -42,4 +42,32 @@ public class LazyFunLoaderTest {
Assert.assertFalse(loader.isInitialize());
}
@Test
public void testOnLoadStaticFactoryMethod1() {
LazyFunLoader<BigObject> loader = LazyFunLoader.onLoad(BigObject::new);
Assert.assertNotNull(loader.get());
Assert.assertTrue(loader.isInitialize());
// 对于某些对象在程序关闭时需要进行销毁操作
loader.ifInitialized(BigObject::destroy);
Assert.assertTrue(loader.get().isDestroy);
}
@Test
public void testOnLoadStaticFactoryMethod2() {
LazyFunLoader<BigObject> loader = LazyFunLoader.onLoad(BigObject::new);
// 若从未使用则可以避免不必要的初始化
loader.ifInitialized(it -> {
Assert.fail();
it.destroy();
});
}
}