From b4cf5ec9e2784a953ae245296c9e49c37eda8f98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Thu, 13 Jan 2022 14:58:20 +0800 Subject: [PATCH] =?UTF-8?q?ObjectUtil=20=E6=96=B0=E5=A2=9E=E4=B8=89?= =?UTF-8?q?=E4=B8=AA=20defaultIfXxx=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/bean/BeanUtil.java | 2 +- .../core/compiler/JavaClassFileManager.java | 2 +- .../core/compiler/JavaSourceCompiler.java | 2 +- .../impl/TemporalAccessorConverter.java | 2 +- .../java/cn/hutool/core/date/DateTime.java | 6 +-- .../hutool/core/date/LocalDateTimeUtil.java | 4 +- .../core/io/FastByteArrayOutputStream.java | 2 +- .../core/io/resource/ClassPathResource.java | 2 +- .../hutool/core/io/resource/FileResource.java | 2 +- .../hutool/core/io/resource/UrlResource.java | 2 +- .../hutool/core/lang/ResourceClassLoader.java | 4 +- .../hutool/core/text/csv/CsvBaseReader.java | 2 +- .../cn/hutool/core/text/csv/CsvParser.java | 2 +- .../cn/hutool/core/text/csv/CsvWriter.java | 2 +- .../hutool/core/thread/ExecutorBuilder.java | 2 +- .../java/cn/hutool/core/util/ObjectUtil.java | 50 +++++++++++++++++++ .../hutool/core/util/ServiceLoaderUtil.java | 2 +- .../main/java/cn/hutool/json/JSONArray.java | 2 +- .../cn/hutool/poi/excel/cell/CellUtil.java | 2 +- .../poi/excel/sax/SheetDataSaxHandler.java | 2 +- 20 files changed, 73 insertions(+), 23 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java b/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java index d9452cd14..b66b15f0d 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java @@ -738,7 +738,7 @@ public class BeanUtil { * @param copyOptions 拷贝选项,见 {@link CopyOptions} */ public static void copyProperties(Object source, Object target, CopyOptions copyOptions) { - BeanCopier.create(source, target, ObjectUtil.defaultIfNull(copyOptions, CopyOptions.create())).copy(); + BeanCopier.create(source, target, ObjectUtil.defaultIfNull(copyOptions, CopyOptions::create)).copy(); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/compiler/JavaClassFileManager.java b/hutool-core/src/main/java/cn/hutool/core/compiler/JavaClassFileManager.java index 1150f9e5c..861883710 100644 --- a/hutool-core/src/main/java/cn/hutool/core/compiler/JavaClassFileManager.java +++ b/hutool-core/src/main/java/cn/hutool/core/compiler/JavaClassFileManager.java @@ -44,7 +44,7 @@ class JavaClassFileManager extends ForwardingJavaFileManager { */ protected JavaClassFileManager(ClassLoader parent, JavaFileManager fileManager) { super(fileManager); - this.parent = ObjectUtil.defaultIfNull(parent, ClassLoaderUtil.getClassLoader()); + this.parent = ObjectUtil.defaultIfNull(parent, ClassLoaderUtil::getClassLoader); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/compiler/JavaSourceCompiler.java b/hutool-core/src/main/java/cn/hutool/core/compiler/JavaSourceCompiler.java index 95030aa1b..39e08d28f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/compiler/JavaSourceCompiler.java +++ b/hutool-core/src/main/java/cn/hutool/core/compiler/JavaSourceCompiler.java @@ -89,7 +89,7 @@ public class JavaSourceCompiler { * @param parent 父类加载器,null则使用默认类加载器 */ private JavaSourceCompiler(ClassLoader parent) { - this.parentClassLoader = ObjectUtil.defaultIfNull(parent, ClassLoaderUtil.getClassLoader()); + this.parentClassLoader = ObjectUtil.defaultIfNull(parent, ClassLoaderUtil::getClassLoader); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java index 76c25b966..22d5186cf 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java @@ -227,7 +227,7 @@ public class TemporalAccessorConverter extends AbstractConverter (null != url) ? FileUtil.getName(url.getPath()) : null); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/ResourceClassLoader.java b/hutool-core/src/main/java/cn/hutool/core/lang/ResourceClassLoader.java index 383f6b98b..509efa967 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/ResourceClassLoader.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/ResourceClassLoader.java @@ -30,8 +30,8 @@ public class ResourceClassLoader extends SecureClassLoader { * @param resourceMap 资源map */ public ResourceClassLoader(ClassLoader parentClassLoader, Map resourceMap) { - super(ObjectUtil.defaultIfNull(parentClassLoader, ClassLoaderUtil.getClassLoader())); - this.resourceMap = ObjectUtil.defaultIfNull(resourceMap, new HashMap<>()); + super(ObjectUtil.defaultIfNull(parentClassLoader, ClassLoaderUtil::getClassLoader)); + this.resourceMap = ObjectUtil.defaultIfNull(resourceMap, HashMap::new); this.cacheClassMap = new HashMap<>(); } diff --git a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvBaseReader.java b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvBaseReader.java index db8d62e4c..84a244e37 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvBaseReader.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvBaseReader.java @@ -49,7 +49,7 @@ public class CsvBaseReader implements Serializable { * @param config 配置项 */ public CsvBaseReader(CsvReadConfig config) { - this.config = ObjectUtil.defaultIfNull(config, CsvReadConfig.defaultConfig()); + this.config = ObjectUtil.defaultIfNull(config, CsvReadConfig::defaultConfig); } //--------------------------------------------------------------------------------------------- Constructor end diff --git a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvParser.java b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvParser.java index 02feadee3..21d996039 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvParser.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvParser.java @@ -80,7 +80,7 @@ public final class CsvParser extends ComputeIter implements Closeable, S */ public CsvParser(final Reader reader, CsvReadConfig config) { this.reader = Objects.requireNonNull(reader, "reader must not be null"); - this.config = ObjectUtil.defaultIfNull(config, CsvReadConfig.defaultConfig()); + this.config = ObjectUtil.defaultIfNull(config, CsvReadConfig::defaultConfig); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvWriter.java b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvWriter.java index 9b0155be6..878011082 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvWriter.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/csv/CsvWriter.java @@ -149,7 +149,7 @@ public final class CsvWriter implements Closeable, Flushable, Serializable { */ public CsvWriter(Writer writer, CsvWriteConfig config) { this.writer = (writer instanceof BufferedWriter) ? writer : new BufferedWriter(writer); - this.config = ObjectUtil.defaultIfNull(config, CsvWriteConfig.defaultConfig()); + this.config = ObjectUtil.defaultIfNull(config, CsvWriteConfig::defaultConfig); } // --------------------------------------------------------------------------------------------------- Constructor end diff --git a/hutool-core/src/main/java/cn/hutool/core/thread/ExecutorBuilder.java b/hutool-core/src/main/java/cn/hutool/core/thread/ExecutorBuilder.java index 418e67068..bdd5c95ca 100644 --- a/hutool-core/src/main/java/cn/hutool/core/thread/ExecutorBuilder.java +++ b/hutool-core/src/main/java/cn/hutool/core/thread/ExecutorBuilder.java @@ -242,7 +242,7 @@ public class ExecutorBuilder implements Builder { workQueue = (corePoolSize <= 0) ? new SynchronousQueue<>() : new LinkedBlockingQueue<>(DEFAULT_QUEUE_CAPACITY); } final ThreadFactory threadFactory = (null != builder.threadFactory) ? builder.threadFactory : Executors.defaultThreadFactory(); - RejectedExecutionHandler handler = ObjectUtil.defaultIfNull(builder.handler, new ThreadPoolExecutor.AbortPolicy()); + RejectedExecutionHandler handler = ObjectUtil.defaultIfNull(builder.handler, ThreadPoolExecutor.AbortPolicy::new); final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(// corePoolSize, // diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ObjectUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ObjectUtil.java index eeab6d5fc..8fe082b43 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ObjectUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ObjectUtil.java @@ -295,6 +295,22 @@ public class ObjectUtil { return isNull(object) ? defaultValue : object; } + /** + * 如果被检查对象为 {@code null}, 返回默认值(由 defaultValueSupplier 提供);否则直接返回 + * + * @param source 被检查对象 + * @param defaultValueSupplier 默认值提供者 + * @param 对象类型 + * @return 被检查对象为{@code null}返回默认值,否则返回自定义handle处理后的返回值 + * @throws NullPointerException {@code defaultValueSupplier == null} 时,抛出 + * @since 5.7.20 + */ + public static T defaultIfNull(T source, Supplier defaultValueSupplier) { + if (isNull(source)) { + return defaultValueSupplier.get(); + } + return source; + } /** * 如果给定对象为{@code null} 返回默认值, 如果不为null 返回自定义handle处理后的返回值 @@ -351,6 +367,23 @@ public class ObjectUtil { return StrUtil.isEmpty(str) ? defaultValue : str; } + /** + * 如果被检查对象为 {@code null} 或 "" 时,返回默认值(由 defaultValueSupplier 提供);否则直接返回 + * + * @param str 被检查对象 + * @param defaultValueSupplier 默认值提供者 + * @param 对象类型(必须实现CharSequence接口) + * @return 被检查对象为{@code null}返回默认值,否则返回自定义handle处理后的返回值 + * @throws NullPointerException {@code defaultValueSupplier == null} 时,抛出 + * @since 5.7.20 + */ + public static T defaultIfEmpty(T str, Supplier defaultValueSupplier) { + if (StrUtil.isEmpty(str)) { + return defaultValueSupplier.get(); + } + return str; + } + /** * 如果给定对象为{@code null}或者""或者空白符返回默认值 * @@ -372,6 +405,23 @@ public class ObjectUtil { return StrUtil.isBlank(str) ? defaultValue : str; } + /** + * 如果被检查对象为 {@code null} 或 "" 或 空白字符串时,返回默认值(由 defaultValueSupplier 提供);否则直接返回 + * + * @param str 被检查对象 + * @param defaultValueSupplier 默认值提供者 + * @param 对象类型(必须实现CharSequence接口) + * @return 被检查对象为{@code null}返回默认值,否则返回自定义handle处理后的返回值 + * @throws NullPointerException {@code defaultValueSupplier == null} 时,抛出 + * @since 5.7.20 + */ + public static T defaultIfBlank(T str, Supplier defaultValueSupplier) { + if (StrUtil.isBlank(str)) { + return defaultValueSupplier.get(); + } + return str; + } + /** * 克隆对象
* 如果对象实现Cloneable接口,调用其clone方法
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ServiceLoaderUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ServiceLoaderUtil.java index 7c28c655b..d04807d5f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ServiceLoaderUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ServiceLoaderUtil.java @@ -76,7 +76,7 @@ public class ServiceLoaderUtil { * @return 服务接口实现列表 */ public static ServiceLoader load(Class clazz, ClassLoader loader) { - return ServiceLoader.load(clazz, ObjectUtil.defaultIfNull(loader, ClassLoaderUtil.getClassLoader())); + return ServiceLoader.load(clazz, ObjectUtil.defaultIfNull(loader, ClassLoaderUtil::getClassLoader)); } /** diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONArray.java b/hutool-json/src/main/java/cn/hutool/json/JSONArray.java index df5f34f13..c1d9e2492 100644 --- a/hutool-json/src/main/java/cn/hutool/json/JSONArray.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONArray.java @@ -95,7 +95,7 @@ public class JSONArray implements JSON, JSONGetter, List, Rando */ public JSONArray(int initialCapacity, JSONConfig config) { this.rawList = new ArrayList<>(initialCapacity); - this.config = ObjectUtil.defaultIfNull(config, JSONConfig.create()); + this.config = ObjectUtil.defaultIfNull(config, JSONConfig::create); } /** diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/cell/CellUtil.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/cell/CellUtil.java index 2a60abe11..171106b59 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/cell/CellUtil.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/cell/CellUtil.java @@ -376,7 +376,7 @@ public class CellUtil { public static Cell getMergedRegionCell(Sheet sheet, int x, int y) { return ObjectUtil.defaultIfNull( getCellIfMergedRegion(sheet, x, y), - SheetUtil.getCell(sheet, y, x)); + () -> SheetUtil.getCell(sheet, y, x)); } /** diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/SheetDataSaxHandler.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/SheetDataSaxHandler.java index ee2e76f64..ea64bb888 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/SheetDataSaxHandler.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/sax/SheetDataSaxHandler.java @@ -294,7 +294,7 @@ public class SheetDataSaxHandler extends DefaultHandler { final int numFmtIndex = xssfCellStyle.getDataFormat(); this.numFmtString = ObjectUtil.defaultIfNull( xssfCellStyle.getDataFormatString(), - BuiltinFormats.getBuiltinFormat(numFmtIndex)); + () -> BuiltinFormats.getBuiltinFormat(numFmtIndex)); if (CellDataType.NUMBER == this.cellDataType && ExcelSaxUtil.isDateFormat(numFmtIndex, numFmtString)) { cellDataType = CellDataType.DATE; }