From 4a384f6a5cd7eea5716fbda1b4597867d6b15c58 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 2 Sep 2021 13:56:19 +0800 Subject: [PATCH] deprecate OptionalBean --- CHANGELOG.md | 3 +- .../cn/hutool/core/bean/OptionalBean.java | 2 + .../cn/hutool/core/bean/OptionalBeanTest.java | 50 ------------------- .../main/java/cn/hutool/json/JSONGetter.java | 46 +++++++++-------- 4 files changed, 30 insertions(+), 71 deletions(-) delete mode 100644 hutool-core/src/test/java/cn/hutool/core/bean/OptionalBeanTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index e0dcb85d3..632cca5ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,12 +3,13 @@ ------------------------------------------------------------------------------------------------------------- -# 5.7.12 (2021-09-01) +# 5.7.12 (2021-09-02) ### 🐣新特性 * 【system 】 OshiUtil增加getCurrentProcess方法 * 【extra 】 SpringUtil增加getApplicationName、publishEvent方法(issue#I485NZ@Gitee) * 【core 】 BeanUtil.getProperty增加判空(issue#I488HA@Gitee) +* 【core 】 OptionalBean弃用(pr#1182@Github) ### 🐞Bug修复 diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/OptionalBean.java b/hutool-core/src/main/java/cn/hutool/core/bean/OptionalBean.java index 032be060b..7804e4313 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/OptionalBean.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/OptionalBean.java @@ -15,7 +15,9 @@ import java.util.function.Supplier; * @param Bean类型 * @author totalo * @since 5.4.7 + * @deprecated {@link java.util.Optional} 可以完成此类的所有功能。 */ +@Deprecated public final class OptionalBean { private static final OptionalBean EMPTY = new OptionalBean<>(); diff --git a/hutool-core/src/test/java/cn/hutool/core/bean/OptionalBeanTest.java b/hutool-core/src/test/java/cn/hutool/core/bean/OptionalBeanTest.java deleted file mode 100644 index 38f5cc16a..000000000 --- a/hutool-core/src/test/java/cn/hutool/core/bean/OptionalBeanTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.hutool.core.bean; - -import org.junit.Assert; -import lombok.Data; -import org.junit.Test; - -public class OptionalBeanTest { - - @Test - public void optionalBeanTest() { - User user = new User(); - user.setName("hello"); - String value1 = OptionalBean.ofNullable(user) - .getBean(User::getSchool) - .getBean(User.School::getAddress).get(); - Assert.assertNull(value1); - - boolean present = OptionalBean.ofNullable(user) - .getBean(User::getSchool) - .getBean(User.School::getAddress).isPresent(); - Assert.assertFalse(present); - - String value2 = OptionalBean.ofNullable(user) - .getBean(User::getSchool) - .getBean(User.School::getAddress).orElse("没得地址"); - Assert.assertEquals(value2, "没得地址"); - try { - OptionalBean.ofNullable(user) - .getBean(User::getSchool) - .getBean(User.School::getAddress).orElseThrow(() -> new RuntimeException("空指针了")); - } catch (Exception e) { - Assert.assertEquals(e.getMessage(), "空指针了"); - } - } - - - @Data - public static class User { - private String name; - private String gender; - private School school; - - @Data - public static class School { - private String name; - private String address; - } - } - -} diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONGetter.java b/hutool-json/src/main/java/cn/hutool/json/JSONGetter.java index d0ac50cc2..06e79aeed 100644 --- a/hutool-json/src/main/java/cn/hutool/json/JSONGetter.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONGetter.java @@ -1,6 +1,5 @@ package cn.hutool.json; -import cn.hutool.core.bean.OptionalBean; import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.ConvertException; import cn.hutool.core.date.DateUtil; @@ -10,6 +9,7 @@ import cn.hutool.core.util.StrUtil; import java.time.LocalDateTime; import java.util.Date; +import java.util.Optional; /** * 用于JSON的Getter类,提供各种类型的Getter方法 @@ -114,24 +114,27 @@ public interface JSONGetter extends OptNullBasicTypeFromObjectGetter { } @Override - default Date getDate(K key, Date defaultValue){ + default Date getDate(K key, Date defaultValue) { // 默认转换 final Object obj = getObj(key); if (null == obj) { return defaultValue; } - if(obj instanceof Date){ + if (obj instanceof Date) { return (Date) obj; } - String format = OptionalBean.ofNullable(getConfig()).getBean(JSONConfig::getDateFormat).get(); - if(StrUtil.isNotBlank(format)){ - // 用户指定了日期格式,获取日期属性时使用对应格式 - final String str = Convert.toStr(obj); - if(null == str){ - return defaultValue; + final Optional formatOps = Optional.ofNullable(getConfig()).map(JSONConfig::getDateFormat); + if (formatOps.isPresent()) { + final String format = formatOps.get(); + if (StrUtil.isNotBlank(format)) { + // 用户指定了日期格式,获取日期属性时使用对应格式 + final String str = Convert.toStr(obj); + if (null == str) { + return defaultValue; + } + return DateUtil.parse(str, format); } - return DateUtil.parse(str, format); } return Convert.toDate(obj, defaultValue); @@ -140,29 +143,32 @@ public interface JSONGetter extends OptNullBasicTypeFromObjectGetter { /** * 获取{@link LocalDateTime}类型值 * - * @param key 键 + * @param key 键 * @param defaultValue 默认值 * @return {@link LocalDateTime} * @since 5.7.7 */ - default LocalDateTime getLocalDateTime(K key, LocalDateTime defaultValue){ + default LocalDateTime getLocalDateTime(K key, LocalDateTime defaultValue) { // 默认转换 final Object obj = getObj(key); if (null == obj) { return defaultValue; } - if(obj instanceof LocalDateTime){ + if (obj instanceof LocalDateTime) { return (LocalDateTime) obj; } - String format = OptionalBean.ofNullable(getConfig()).getBean(JSONConfig::getDateFormat).get(); - if(StrUtil.isNotBlank(format)){ - // 用户指定了日期格式,获取日期属性时使用对应格式 - final String str = Convert.toStr(obj); - if(null == str){ - return defaultValue; + final Optional formatOps = Optional.ofNullable(getConfig()).map(JSONConfig::getDateFormat); + if (formatOps.isPresent()) { + final String format = formatOps.get(); + if (StrUtil.isNotBlank(format)) { + // 用户指定了日期格式,获取日期属性时使用对应格式 + final String str = Convert.toStr(obj); + if (null == str) { + return defaultValue; + } + return LocalDateTimeUtil.parse(str, format); } - return LocalDateTimeUtil.parse(str, format); } return Convert.toLocalDateTime(obj, defaultValue);