赞
踩
MoreSuppliers类是一个Java工具类,它提供了一些增强的Supplier函数,使得Supplier执行的结果可以被缓存,真正的调用只执行一次。
这个方法返回一个懒加载的提供器,首次获取值时通过delegate加载值,并缓存这个值,在后续获取时直接返回这个缓存的值。这个方法的使用场景是当你有一个计算成本较高或者IO操作的Supplier,并且你希望只执行一次这个操作,然后缓存结果以供后续使用。
示例:
- Supplier<String> expensiveOperation = () -> {
-
- // Some expensive operation...
-
- return "result";
-
- };
-
- Supplier<String> lazySupplier = MoreSuppliers.lazy(expensiveOperation);
-
- String result = lazySupplier.get(); // The expensive operation is performed here.
-
- String cachedResult = lazySupplier.get(); // The cached result is returned here.
这个方法和上一个方法类似,但是它允许在关闭提供器返回的资源后,是否释放缓存的对象。这个方法的使用场景是当你的Supplier返回的是一个需要关闭的资源,比如一个数据库连接,你希望在关闭这个资源后,下次调用get()方法时重新获取一个新的资源。
示例:
- Supplier<Connection> connectionSupplier = () -> {
-
- // Get a connection from the database...
-
- return connection;
-
- };
-
- CloseableSupplier<Connection> lazySupplier = MoreSuppliers.lazy(connectionSupplier, true);
-
- Connection connection = lazySupplier.get(); // The connection is obtained here.
-
- lazySupplier.tryClose(Connection::close); // The connection is closed here.
-
- Connection newConnection = lazySupplier.get(); // A new connection is obtained here.
这个方法返回一个懒加载的提供器,支持异常类型声明。这个方法的使用场景是当你的Supplier可能抛出一个异常,你希望这个异常能被正确地传播出去。
示例:
- ThrowableSupplier<String, IOException> ioOperation = () -> {
-
- // Some IO operation...
-
- return "result";
-
- };
-
- ThrowableSupplier<String, IOException> lazySupplier = MoreSuppliers.lazyEx(ioOperation);
-
- try {
-
- String result = lazySupplier.get(); // The IO operation is performed here.
-
- } catch (IOException e) {
-
- // Handle the exception...
-
- }
这个方法和上一个方法类似,但是它允许在关闭提供器返回的资源后,是否释放缓存的对象。这个方法的使用场景是当你的Supplier返回的是一个需要关闭的资源并且可能抛出一个异常,你希望在关闭这个资源后,下次调用get()方法时重新获取一个新的资源,并且异常能被正确地传播出去。
示例:
- ThrowableSupplier<Connection, SQLException> connectionSupplier = () -> {
-
- // Get a connection from the database...
-
- return connection;
-
- };
-
- CloseableThrowableSupplier<Connection, SQLException> lazySupplier = MoreSuppliers.lazyEx(connectionSupplier, true);
-
- try {
-
- Connection connection = lazySupplier.get(); // The connection is obtained here.
-
- lazySupplier.tryClose(Connection::close); // The connection is closed here.
-
- Connection newConnection = lazySupplier.get(); // A new connection is obtained here.
-
- } catch (SQLException e) {
-
- // Handle the exception...
-
- }
这个方法返回一个异步加载的提供器,通过异步线程来完成初始化操作,支持超时。当超过指定的时间没有获取初始值成功时,使用pendingSupplier提供的值作为托底。这个方法的使用场景是当你的Supplier需要花费较长的时间来获取值,你希望这个操作能在一个单独的线程中进行,而主线程可以继续执行其他任务。
示例:
- Supplier<String> slowOperation = () -> {
-
- // Some slow operation...
-
- return "result";
-
- };
-
- Supplier<String> fallback = () -> "fallback";
-
- AsyncSupplier<String> asyncSupplier = MoreSuppliers.asyncLazyEx(slowOperation, fallback, "InitThread");
-
- String result = asyncSupplier.get(Duration.ofSeconds(5)); // The slow operation is performed in a separate thread. If it takes more than 5 seconds, the fallback value is returned.
这个方法和上一个方法类似,但是它没有提供托底的Supplier,如果异步初始化值超时,它将返回null。
示例:
- Supplier<String> slowOperation = () -> {
-
- // Some slow operation...
-
- return "result";
-
- };
-
- AsyncSupplier<String> asyncSupplier = MoreSuppliers.asyncLazyEx(slowOperation, "InitThread");
-
- String result = asyncSupplier.get(Duration.ofSeconds(5)); // The slow operation is performed in a separate thread. If it takes more than 5 seconds, null is returned.
这个方法和上一个方法类似,但是它没有指定执行初始化操作的线程名称。
示例:
- Supplier<String> slowOperation = () -> {
-
- // Some slow operation...
-
- return "result";
-
- };
-
- AsyncSupplier<String> asyncSupplier = MoreSuppliers.asyncLazyEx(slowOperation);
-
- String result = asyncSupplier.get(Duration.ofSeconds(5)); // The slow operation is performed in a separate thread. If it takes more than 5 seconds, null is returned.
这是一个可关闭的Supplier实现,支持通过tryClose(ThrowableConsumer<T, X>closer)方法关闭提供器返回的资源。
示例:
- CloseableSupplier<Connection> connectionSupplier = MoreSuppliers.lazy(() -> {
-
- // Get a connection from the database...
-
- return connection;
-
- }, true);
-
- Connection connection = connectionSupplier.get(); // The connection is obtained here.
-
- connectionSupplier.tryClose(Connection::close); // The connection is closed here.
这是一个可关闭的Supplier实现,支持异常类型声明,通过tryClose(ThrowableConsumer<T, X> closer)方法关闭提供器返回的资源。
示例:
- CloseableThrowableSupplier<Connection, SQLException> connectionSupplier = MoreSuppliers.lazyEx(() -> {
-
- // Get a connection from the database...
-
- return connection;
-
- }, true);
-
- try {
-
- Connection connection = connectionSupplier.get(); // The connection is obtained here.
-
- connectionSupplier.tryClose(Connection::close); // The connection is closed here.
-
- } catch (SQLException e) {
-
- // Handle the exception...
-
- }
这是一个异步加载的Supplier实现,通过异步线程来完成初始化操作,支持超时。当超过指定的时间没有获取初始值成功时,使用pendingSupplier提供的值作为托底。
示例:
- Supplier<String> slowOperation = () -> {
-
- // Some slow operation...
-
- return "result";
-
- };
-
- Supplier<String> fallback = () -> "fallback";
-
- AsyncSupplier<String> asyncSupplier = MoreSuppliers.asyncLazyEx(slowOperation, fallback, "InitThread");
-
- String result = asyncSupplier.get(Duration.ofSeconds(5)); // The slow operation is performed in a separate thread. If it takes more than 5 seconds, the fallback value is returned.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。