From 1473d4625febaf03ca42400027bb0509481915d7 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 7 Jun 2022 00:46:53 +0800 Subject: [PATCH] fix code --- .../core/convert/AbstractConverter.java | 76 ++++----------- .../java/cn/hutool/core/convert/CastUtil.java | 14 +++ .../cn/hutool/core/convert/TypeConverter.java | 4 +- .../core/convert/impl/ArrayConverter.java | 77 ++++++--------- .../convert/impl/AtomicBooleanConverter.java | 9 +- .../impl/AtomicIntegerArrayConverter.java | 4 +- .../impl/AtomicLongArrayConverter.java | 4 +- .../impl/AtomicReferenceConverter.java | 11 +-- .../core/convert/impl/BeanConverter.java | 9 +- .../core/convert/impl/BooleanConverter.java | 4 +- .../core/convert/impl/CalendarConverter.java | 10 +- .../core/convert/impl/CastConverter.java | 12 +-- .../core/convert/impl/CharacterConverter.java | 4 +- .../core/convert/impl/CharsetConverter.java | 8 +- .../core/convert/impl/ClassConverter.java | 4 +- .../convert/impl/CollectionConverter.java | 10 +- .../core/convert/impl/CurrencyConverter.java | 8 +- .../core/convert/impl/DateConverter.java | 62 +++++------- .../core/convert/impl/DurationConverter.java | 4 +- .../core/convert/impl/EnumConverter.java | 9 +- .../core/convert/impl/LocaleConverter.java | 8 +- .../core/convert/impl/MapConverter.java | 12 +-- .../core/convert/impl/NumberConverter.java | 10 +- .../core/convert/impl/OptConverter.java | 4 +- .../core/convert/impl/OptionalConverter.java | 4 +- .../core/convert/impl/PathConverter.java | 8 +- .../core/convert/impl/PeriodConverter.java | 4 +- .../core/convert/impl/PrimitiveConverter.java | 23 +---- .../core/convert/impl/ReferenceConverter.java | 4 +- .../impl/StackTraceElementConverter.java | 8 +- .../core/convert/impl/StringConverter.java | 4 +- .../impl/TemporalAccessorConverter.java | 96 ++++++++----------- .../core/convert/impl/TimeZoneConverter.java | 8 +- .../core/convert/impl/URIConverter.java | 8 +- .../core/convert/impl/URLConverter.java | 8 +- .../core/convert/impl/UUIDConverter.java | 10 +- .../cn/hutool/core/lang/ansi/AnsiEncoder.java | 1 - .../cn/hutool/core/reflect/ReflectUtil.java | 6 +- .../log/dialect/console/ConsoleColorLog.java | 1 + 39 files changed, 226 insertions(+), 344 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java index c66d4f247..56c6bc8ec 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java @@ -1,11 +1,12 @@ package cn.hutool.core.convert; -import cn.hutool.core.reflect.ClassUtil; -import cn.hutool.core.text.StrUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.reflect.TypeUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.CharUtil; import java.io.Serializable; +import java.lang.reflect.Type; import java.util.Map; /** @@ -13,58 +14,30 @@ import java.util.Map; * 转换器不会抛出转换异常,转换失败时会返回{@code null} * * @author Looly - * */ -public abstract class AbstractConverter implements Converter, Serializable { +public abstract class AbstractConverter implements TypeConverter, Serializable { private static final long serialVersionUID = 1L; - /** - * 不抛异常转换
- * 当转换失败时返回默认值 - * - * @param value 被转换的值 - * @param defaultValue 默认值 - * @return 转换后的值 - * @since 4.5.7 - */ - public T convertQuietly(final Object value, final T defaultValue) { - try { - return convert(value, defaultValue); - } catch (final Exception e) { - return defaultValue; - } - } - @Override - @SuppressWarnings("unchecked") - public T convert(final Object value, final T defaultValue) { - Class targetType = getTargetType(); - if (null == targetType && null == defaultValue) { - throw new NullPointerException(StrUtil.format("[type] and [defaultValue] are both null for Converter [{}], we can not know what type to convert !", this.getClass().getName())); - } - if (null == targetType) { - // 目标类型不确定时使用默认值的类型 - targetType = (Class) defaultValue.getClass(); - } + public Object convert(Type targetType, final Object value) { + Assert.notNull(targetType); if (null == value) { - return defaultValue; + return null; } - if (null == defaultValue || targetType.isInstance(defaultValue)) { - if (targetType.isInstance(value) && false == Map.class.isAssignableFrom(targetType)) { - // 除Map外,已经是目标类型,不需要转换(Map类型涉及参数类型,需要单独转换) - return targetType.cast(value); - } - final T result = convertInternal(value); - return ((null == result) ? defaultValue : result); - } else { - throw new IllegalArgumentException( - StrUtil.format("Default value [{}]({}) is not the instance of [{}]", defaultValue, defaultValue.getClass(), targetType)); + Class targetClass = TypeUtil.getClass(targetType); + Assert.notNull(targetClass, "Target type is not a class!"); + + // 尝试强转 + if (targetClass.isInstance(value) && false == Map.class.isAssignableFrom(targetClass)) { + // 除Map外,已经是目标类型,不需要转换(Map类型涉及参数类型,需要单独转换) + return CastUtil.castTo(targetClass, value); } + return convertInternal(targetClass, value); } /** - * 内部转换器,被 {@link AbstractConverter#convert(Object, Object)} 调用,实现基本转换逻辑
+ * 内部转换器,被 {@link AbstractConverter#convert(Type, Object)} 调用,实现基本转换逻辑
* 内部转换器转换后如果转换失败可以做如下操作,处理结果都为返回默认值: * *
@@ -72,10 +45,11 @@ public abstract class AbstractConverter implements Converter, Serializable
 	 * 2、抛出一个{@link RuntimeException}异常
 	 * 
* + * @param targetClass 目标类型 * @param value 值 * @return 转换后的类型 */ - protected abstract T convertInternal(Object value); + protected abstract Object convertInternal(Class targetClass, Object value); /** * 值转为String,用于内部转换中需要使用String中转的情况
@@ -98,20 +72,10 @@ public abstract class AbstractConverter implements Converter, Serializable return value.toString(); } else if (ArrayUtil.isArray(value)) { return ArrayUtil.toString(value); - } else if(CharUtil.isChar(value)) { + } else if (CharUtil.isChar(value)) { //对于ASCII字符使用缓存加速转换,减少空间创建 - return CharUtil.toString((char)value); + return CharUtil.toString((char) value); } return value.toString(); } - - /** - * 获得此类实现类的泛型类型 - * - * @return 此类的泛型类型,可能为{@code null} - */ - @SuppressWarnings("unchecked") - public Class getTargetType() { - return (Class) ClassUtil.getTypeArgument(getClass()); - } } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/CastUtil.java b/hutool-core/src/main/java/cn/hutool/core/convert/CastUtil.java index 482de45c1..e200daa7a 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/CastUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/CastUtil.java @@ -1,5 +1,7 @@ package cn.hutool.core.convert; +import cn.hutool.core.lang.Assert; + import java.util.Collection; import java.util.List; import java.util.Map; @@ -13,6 +15,18 @@ import java.util.Set; */ public class CastUtil { + /** + * 将指定对象强制转换为指定类型 + * + * @param 目标类型 + * @param targetType 指定目标类型 + * @param value 被转换的对象 + * @return 转换后的对象 + */ + public static T castTo(Class targetType, final Object value) { + return Assert.notNull(targetType).cast(value); + } + /** * 泛型集合向上转型。例如将Collection<Integer>转换为Collection<Number> * diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/TypeConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/TypeConverter.java index b72acd7f6..8754bd396 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/TypeConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/TypeConverter.java @@ -18,7 +18,7 @@ public interface TypeConverter { * @param targetType 目标Type,非泛型类使用 * @param value 原始值 * @return 转换后的值 - * @throws IllegalArgumentException 无法确定目标类型,且默认值为{@code null},无法确定类型 + * @throws ConvertException 转换无法正常完成或转换异常时抛出此异常 */ - Object convert(Type targetType, Object value); + Object convert(Type targetType, Object value) throws ConvertException; } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java index f1668c238..7af729cd8 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java @@ -21,15 +21,9 @@ import java.util.List; * * @author Looly */ -public class ArrayConverter extends AbstractConverter { +public class ArrayConverter extends AbstractConverter { private static final long serialVersionUID = 1L; - private final Class targetType; - /** - * 目标元素类型 - */ - private final Class targetComponentType; - /** * 是否忽略元素转换错误 */ @@ -37,46 +31,32 @@ public class ArrayConverter extends AbstractConverter { /** * 构造 - * - * @param targetType 目标数组类型 */ - public ArrayConverter(final Class targetType) { - this(targetType, false); + public ArrayConverter() { + this(false); } /** * 构造 * - * @param targetType 目标数组类型 * @param ignoreElementError 是否忽略元素转换错误 */ - public ArrayConverter(Class targetType, final boolean ignoreElementError) { - if (null == targetType) { - // 默认Object数组 - targetType = Object[].class; - } - - if (targetType.isArray()) { - this.targetType = targetType; - this.targetComponentType = targetType.getComponentType(); - } else { - //用户传入类为非数组时,按照数组元素类型对待 - this.targetComponentType = targetType; - this.targetType = ArrayUtil.getArrayType(targetType); - } - + public ArrayConverter(final boolean ignoreElementError) { this.ignoreElementError = ignoreElementError; } @Override - protected Object convertInternal(final Object value) { - return value.getClass().isArray() ? convertArrayToArray(value) : convertObjectToArray(value); - } + protected Object convertInternal(Class targetClass, final Object value) { + final Class targetComponentType; + if (targetClass.isArray()) { + targetComponentType = targetClass.getComponentType(); + } else { + //用户传入类为非数组时,按照数组元素类型对待 + targetComponentType = targetClass; + } - @SuppressWarnings({"unchecked", "rawtypes"}) - @Override - public Class getTargetType() { - return this.targetType; + return value.getClass().isArray() ? convertArrayToArray(targetComponentType, value) + : convertObjectToArray(targetComponentType, value); } /** @@ -97,7 +77,7 @@ public class ArrayConverter extends AbstractConverter { * @param array 被转换的数组值 * @return 转换后的数组 */ - private Object convertArrayToArray(final Object array) { + private Object convertArrayToArray(final Class targetComponentType, final Object array) { final Class valueComponentType = ArrayUtil.getComponentType(array); if (valueComponentType == targetComponentType) { @@ -108,7 +88,7 @@ public class ArrayConverter extends AbstractConverter { final Object result = Array.newInstance(targetComponentType, len); for (int i = 0; i < len; i++) { - Array.set(result, i, convertComponentType(Array.get(array, i))); + Array.set(result, i, convertComponentType(targetComponentType, Array.get(array, i))); } return result; } @@ -116,13 +96,14 @@ public class ArrayConverter extends AbstractConverter { /** * 非数组对数组转换 * + * @param targetComponentType 目标单个节点类型 * @param value 被转换值 * @return 转换后的数组 */ - private Object convertObjectToArray(final Object value) { + private Object convertObjectToArray(final Class targetComponentType, final Object value) { if (value instanceof CharSequence) { if (targetComponentType == char.class || targetComponentType == Character.class) { - return convertArrayToArray(value.toString().toCharArray()); + return convertArrayToArray(targetComponentType, value.toString().toCharArray()); } //issue#2365 @@ -137,7 +118,7 @@ public class ArrayConverter extends AbstractConverter { // 单纯字符串情况下按照逗号分隔后劈开 final String[] strings = StrUtil.splitToArray(value.toString(), CharUtil.COMMA); - return convertArrayToArray(strings); + return convertArrayToArray(targetComponentType, strings); } final Object result; @@ -146,7 +127,7 @@ public class ArrayConverter extends AbstractConverter { final List list = (List) value; result = Array.newInstance(targetComponentType, list.size()); for (int i = 0; i < list.size(); i++) { - Array.set(result, i, convertComponentType(list.get(i))); + Array.set(result, i, convertComponentType(targetComponentType, list.get(i))); } } else if (value instanceof Collection) { // 集合转数组 @@ -155,7 +136,7 @@ public class ArrayConverter extends AbstractConverter { int i = 0; for (final Object element : collection) { - Array.set(result, i, convertComponentType(element)); + Array.set(result, i, convertComponentType(targetComponentType, element)); i++; } } else if (value instanceof Iterable) { @@ -163,14 +144,14 @@ public class ArrayConverter extends AbstractConverter { final List list = IterUtil.toList((Iterable) value); result = Array.newInstance(targetComponentType, list.size()); for (int i = 0; i < list.size(); i++) { - Array.set(result, i, convertComponentType(list.get(i))); + Array.set(result, i, convertComponentType(targetComponentType, list.get(i))); } } else if (value instanceof Iterator) { // 可循环对象转数组,可循环对象无法获取长度,因此先转为List后转为数组 final List list = IterUtil.toList((Iterator) value); result = Array.newInstance(targetComponentType, list.size()); for (int i = 0; i < list.size(); i++) { - Array.set(result, i, convertComponentType(list.get(i))); + Array.set(result, i, convertComponentType(targetComponentType, list.get(i))); } }else if (value instanceof Number && byte.class == targetComponentType) { // 用户可能想序列化指定对象 @@ -180,7 +161,7 @@ public class ArrayConverter extends AbstractConverter { result = ObjUtil.serialize(value); } else { // everything else: - result = convertToSingleElementArray(value); + result = convertToSingleElementArray(targetComponentType, value); } return result; @@ -192,9 +173,9 @@ public class ArrayConverter extends AbstractConverter { * @param value 被转换的值 * @return 数组,只包含一个元素 */ - private Object[] convertToSingleElementArray(final Object value) { + private Object[] convertToSingleElementArray(final Class targetComponentType, final Object value) { final Object[] singleElementArray = ArrayUtil.newArray(targetComponentType, 1); - singleElementArray[0] = convertComponentType(value); + singleElementArray[0] = convertComponentType(targetComponentType, value); return singleElementArray; } @@ -205,8 +186,8 @@ public class ArrayConverter extends AbstractConverter { * @return 转换后的值,转换失败若{@link #ignoreElementError}为true,返回null,否则抛出异常 * @since 5.4.3 */ - private Object convertComponentType(final Object value) { - return Convert.convertWithCheck(this.targetComponentType, value, null, this.ignoreElementError); + private Object convertComponentType(final Class targetComponentType, final Object value) { + return Convert.convertWithCheck(targetComponentType, value, null, this.ignoreElementError); } // -------------------------------------------------------------------------------------- Private method end } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicBooleanConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicBooleanConverter.java index 643a9179a..6700fe4d4 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicBooleanConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicBooleanConverter.java @@ -1,26 +1,25 @@ package cn.hutool.core.convert.impl; -import java.util.concurrent.atomic.AtomicBoolean; - import cn.hutool.core.convert.AbstractConverter; import cn.hutool.core.util.BooleanUtil; +import java.util.concurrent.atomic.AtomicBoolean; + /** * {@link AtomicBoolean}转换器 * * @author Looly * @since 3.0.8 */ -public class AtomicBooleanConverter extends AbstractConverter { +public class AtomicBooleanConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected AtomicBoolean convertInternal(final Object value) { + protected AtomicBoolean convertInternal(final Class targetClass, final Object value) { if (value instanceof Boolean) { return new AtomicBoolean((Boolean) value); } final String valueStr = convertToStr(value); return new AtomicBoolean(BooleanUtil.toBoolean(valueStr)); } - } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicIntegerArrayConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicIntegerArrayConverter.java index fbc4ac824..545518518 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicIntegerArrayConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicIntegerArrayConverter.java @@ -11,11 +11,11 @@ import java.util.concurrent.atomic.AtomicIntegerArray; * @author Looly * @since 5.4.5 */ -public class AtomicIntegerArrayConverter extends AbstractConverter { +public class AtomicIntegerArrayConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected AtomicIntegerArray convertInternal(final Object value) { + protected AtomicIntegerArray convertInternal(final Class targetClass, final Object value) { return new AtomicIntegerArray(Convert.convert(int[].class, value)); } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicLongArrayConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicLongArrayConverter.java index 2598aecb5..ade67ce44 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicLongArrayConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicLongArrayConverter.java @@ -11,11 +11,11 @@ import java.util.concurrent.atomic.AtomicLongArray; * @author Looly * @since 5.4.5 */ -public class AtomicLongArrayConverter extends AbstractConverter { +public class AtomicLongArrayConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected AtomicLongArray convertInternal(final Object value) { + protected AtomicLongArray convertInternal(final Class targetClass, final Object value) { return new AtomicLongArray(Convert.convert(long[].class, value)); } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicReferenceConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicReferenceConverter.java index bf0a15ae1..ac5d6ade3 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicReferenceConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/AtomicReferenceConverter.java @@ -1,24 +1,23 @@ package cn.hutool.core.convert.impl; -import java.lang.reflect.Type; -import java.util.concurrent.atomic.AtomicReference; - import cn.hutool.core.convert.AbstractConverter; import cn.hutool.core.convert.ConverterRegistry; import cn.hutool.core.reflect.TypeUtil; +import java.lang.reflect.Type; +import java.util.concurrent.atomic.AtomicReference; + /** * {@link AtomicReference}转换器 * * @author Looly * @since 3.0.8 */ -@SuppressWarnings("rawtypes") -public class AtomicReferenceConverter extends AbstractConverter { +public class AtomicReferenceConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected AtomicReference convertInternal(final Object value) { + protected AtomicReference convertInternal(final Class targetClass, final Object value) { //尝试将值转换为Reference泛型的类型 Object targetValue = null; diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java index 20f52a605..4721850ce 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java @@ -26,7 +26,7 @@ import java.util.Map; * @author Looly * @since 4.0.2 */ -public class BeanConverter extends AbstractConverter { +public class BeanConverter extends AbstractConverter { private static final long serialVersionUID = 1L; private final Type beanType; @@ -65,7 +65,7 @@ public class BeanConverter extends AbstractConverter { } @Override - protected T convertInternal(final Object value) { + protected T convertInternal(final Class targetClass, final Object value) { if(value instanceof Map || value instanceof ValueProvider || BeanUtil.isBean(value.getClass())) { @@ -83,9 +83,4 @@ public class BeanConverter extends AbstractConverter { throw new ConvertException("Unsupported source type: {}", value.getClass()); } - - @Override - public Class getTargetType() { - return this.beanClass; - } } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/BooleanConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/BooleanConverter.java index 5060d8704..da8c09f73 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/BooleanConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/BooleanConverter.java @@ -16,11 +16,11 @@ import cn.hutool.core.util.BooleanUtil; * * @author Looly */ -public class BooleanConverter extends AbstractConverter { +public class BooleanConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected Boolean convertInternal(final Object value) { + protected Boolean convertInternal(final Class targetClass, final Object value) { if (value instanceof Number) { // 0为false,其它数字为true return 0 != ((Number) value).doubleValue(); diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CalendarConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CalendarConverter.java index 3e102d70c..18940e088 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CalendarConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CalendarConverter.java @@ -1,19 +1,19 @@ package cn.hutool.core.convert.impl; -import java.util.Calendar; -import java.util.Date; - import cn.hutool.core.convert.AbstractConverter; import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.StrUtil; +import java.util.Calendar; +import java.util.Date; + /** * 日期转换器 * * @author Looly * */ -public class CalendarConverter extends AbstractConverter { +public class CalendarConverter extends AbstractConverter { private static final long serialVersionUID = 1L; /** 日期格式化 */ @@ -38,7 +38,7 @@ public class CalendarConverter extends AbstractConverter { } @Override - protected Calendar convertInternal(final Object value) { + protected Calendar convertInternal(final Class targetClass, final Object value) { // Handle Date if (value instanceof Date) { return DateUtil.calendar((Date)value); diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CastConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CastConverter.java index 4eca32c69..0a0a2664d 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CastConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CastConverter.java @@ -10,19 +10,13 @@ import cn.hutool.core.convert.ConvertException; * @param 强制转换到的类型 * @since 4.0.2 */ -public class CastConverter extends AbstractConverter { +public class CastConverter extends AbstractConverter { private static final long serialVersionUID = 1L; - private Class targetType; - @Override - protected T convertInternal(final Object value) { + protected T convertInternal(final Class targetClass, final Object value) { // 由于在AbstractConverter中已经有类型判断并强制转换,因此当在上一步强制转换失败时直接抛出异常 - throw new ConvertException("Can not cast value to [{}]", this.targetType); + throw new ConvertException("Can not cast value to [{}]", targetClass); } - @Override - public Class getTargetType() { - return this.targetType; - } } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CharacterConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CharacterConverter.java index 00c64f5c3..ba1dd63fb 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CharacterConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CharacterConverter.java @@ -10,11 +10,11 @@ import cn.hutool.core.text.StrUtil; * @author Looly * */ -public class CharacterConverter extends AbstractConverter { +public class CharacterConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected Character convertInternal(final Object value) { + protected Character convertInternal(final Class targetClass, final Object value) { if (value instanceof Boolean) { return BooleanUtil.toCharacter((Boolean) value); } else { diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CharsetConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CharsetConverter.java index c0cb1943e..448284e98 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CharsetConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CharsetConverter.java @@ -1,20 +1,20 @@ package cn.hutool.core.convert.impl; -import java.nio.charset.Charset; - import cn.hutool.core.convert.AbstractConverter; import cn.hutool.core.util.CharsetUtil; +import java.nio.charset.Charset; + /** * 编码对象转换器 * @author Looly * */ -public class CharsetConverter extends AbstractConverter{ +public class CharsetConverter extends AbstractConverter{ private static final long serialVersionUID = 1L; @Override - protected Charset convertInternal(final Object value) { + protected Charset convertInternal(final Class targetClass, final Object value) { return CharsetUtil.charset(convertToStr(value)); } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/ClassConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/ClassConverter.java index 7c6616244..46232f217 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/ClassConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/ClassConverter.java @@ -9,7 +9,7 @@ import cn.hutool.core.classloader.ClassLoaderUtil; * * @author Looly */ -public class ClassConverter extends AbstractConverter> { +public class ClassConverter extends AbstractConverter { private static final long serialVersionUID = 1L; private final boolean isInitialized; @@ -32,7 +32,7 @@ public class ClassConverter extends AbstractConverter> { } @Override - protected Class convertInternal(final Object value) { + protected Class convertInternal(final Class targetClass, final Object value) { return ClassLoaderUtil.loadClass(convertToStr(value), isInitialized); } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CollectionConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CollectionConverter.java index cc43b6420..9de4b900f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CollectionConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CollectionConverter.java @@ -1,8 +1,7 @@ package cn.hutool.core.convert.impl; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.convert.Converter; -import cn.hutool.core.util.ObjUtil; +import cn.hutool.core.convert.TypeConverter; import cn.hutool.core.reflect.TypeUtil; import java.lang.reflect.Type; @@ -14,7 +13,7 @@ import java.util.Collection; * @author Looly * @since 3.0.8 */ -public class CollectionConverter implements Converter> { +public class CollectionConverter implements TypeConverter { /** 集合类型 */ private final Type collectionType; @@ -60,9 +59,8 @@ public class CollectionConverter implements Converter> { // ---------------------------------------------------------------------------------------------- Constractor end @Override - public Collection convert(final Object value, final Collection defaultValue) throws IllegalArgumentException { - final Collection result = convertInternal(value); - return ObjUtil.defaultIfNull(result, defaultValue); + public Collection convert(final Type targetType, final Object value) { + return convertInternal(value); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CurrencyConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CurrencyConverter.java index 0e4cb7fe4..c1f47e1a2 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CurrencyConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CurrencyConverter.java @@ -1,20 +1,20 @@ package cn.hutool.core.convert.impl; -import java.util.Currency; - import cn.hutool.core.convert.AbstractConverter; +import java.util.Currency; + /** * 货币{@link Currency} 转换器 * * @author Looly * @since 3.0.8 */ -public class CurrencyConverter extends AbstractConverter { +public class CurrencyConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected Currency convertInternal(final Object value) { + protected Currency convertInternal(Class targetClass, final Object value) { return Currency.getInstance(convertToStr(value)); } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/DateConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/DateConverter.java index 67b568f52..018286cff 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/DateConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/DateConverter.java @@ -14,10 +14,9 @@ import java.util.Calendar; * * @author Looly */ -public class DateConverter extends AbstractConverter { +public class DateConverter extends AbstractConverter { private static final long serialVersionUID = 1L; - private final Class targetType; /** * 日期格式化 */ @@ -26,20 +25,9 @@ public class DateConverter extends AbstractConverter { /** * 构造 * - * @param targetType 目标类型 - */ - public DateConverter(final Class targetType) { - this.targetType = targetType; - } - - /** - * 构造 - * - * @param targetType 目标类型 * @param format 日期格式 */ - public DateConverter(final Class targetType, final String format) { - this.targetType = targetType; + public DateConverter(final String format) { this.format = format; } @@ -62,16 +50,16 @@ public class DateConverter extends AbstractConverter { } @Override - protected java.util.Date convertInternal(final Object value) { + protected java.util.Date convertInternal(Class targetClass, final Object value) { if (value == null || (value instanceof CharSequence && StrUtil.isBlank(value.toString()))) { return null; } if (value instanceof TemporalAccessor) { - return wrap(DateUtil.date((TemporalAccessor) value)); + return wrap(targetClass, DateUtil.date((TemporalAccessor) value)); } else if (value instanceof Calendar) { - return wrap(DateUtil.date((Calendar) value)); + return wrap(targetClass, DateUtil.date((Calendar) value)); } else if (value instanceof Number) { - return wrap(((Number) value).longValue()); + return wrap(targetClass, ((Number) value).longValue()); } else { // 统一按照字符串处理 final String valueStr = convertToStr(value); @@ -79,11 +67,11 @@ public class DateConverter extends AbstractConverter { ? DateUtil.parse(valueStr) // : DateUtil.parse(valueStr, this.format); if (null != dateTime) { - return wrap(dateTime); + return wrap(targetClass, dateTime); } } - throw new ConvertException("Can not convert {}:[{}] to {}", value.getClass().getName(), value, this.targetType.getName()); + throw new ConvertException("Can not convert {}:[{}] to {}", value.getClass().getName(), value, targetClass.getName()); } /** @@ -92,25 +80,25 @@ public class DateConverter extends AbstractConverter { * @param date Date * @return 目标类型对象 */ - private java.util.Date wrap(final DateTime date) { + private java.util.Date wrap(Class targetClass, final DateTime date) { // 返回指定类型 - if (java.util.Date.class == targetType) { + if (java.util.Date.class == targetClass) { return date.toJdkDate(); } - if (DateTime.class == targetType) { + if (DateTime.class == targetClass) { return date; } - if (java.sql.Date.class == targetType) { + if (java.sql.Date.class == targetClass) { return date.toSqlDate(); } - if (java.sql.Time.class == targetType) { + if (java.sql.Time.class == targetClass) { return new java.sql.Time(date.getTime()); } - if (java.sql.Timestamp.class == targetType) { + if (java.sql.Timestamp.class == targetClass) { return date.toTimestamp(); } - throw new UnsupportedOperationException(StrUtil.format("Unsupported target Date type: {}", this.targetType.getName())); + throw new UnsupportedOperationException(StrUtil.format("Unsupported target Date type: {}", targetClass.getName())); } /** @@ -119,30 +107,24 @@ public class DateConverter extends AbstractConverter { * @param mills Date * @return 目标类型对象 */ - private java.util.Date wrap(final long mills) { + private java.util.Date wrap(Class targetClass, final long mills) { // 返回指定类型 - if (java.util.Date.class == targetType) { + if (java.util.Date.class == targetClass) { return new java.util.Date(mills); } - if (DateTime.class == targetType) { + if (DateTime.class == targetClass) { return DateUtil.date(mills); } - if (java.sql.Date.class == targetType) { + if (java.sql.Date.class == targetClass) { return new java.sql.Date(mills); } - if (java.sql.Time.class == targetType) { + if (java.sql.Time.class == targetClass) { return new java.sql.Time(mills); } - if (java.sql.Timestamp.class == targetType) { + if (java.sql.Timestamp.class == targetClass) { return new java.sql.Timestamp(mills); } - throw new UnsupportedOperationException(StrUtil.format("Unsupported target Date type: {}", this.targetType.getName())); - } - - @SuppressWarnings("unchecked") - @Override - public Class getTargetType() { - return (Class) this.targetType; + throw new UnsupportedOperationException(StrUtil.format("Unsupported target Date type: {}", targetClass.getName())); } } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/DurationConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/DurationConverter.java index f183f613b..5739eb0c1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/DurationConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/DurationConverter.java @@ -12,11 +12,11 @@ import java.time.temporal.TemporalAmount; * @author Looly * @since 5.0.0 */ -public class DurationConverter extends AbstractConverter { +public class DurationConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected Duration convertInternal(final Object value) { + protected Duration convertInternal(final Class targetClass, final Object value) { if(value instanceof TemporalAmount){ return Duration.from((TemporalAmount) value); } else if(value instanceof Long){ diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/EnumConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/EnumConverter.java index 4f0dc4dad..bfd277450 100755 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/EnumConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/EnumConverter.java @@ -22,7 +22,7 @@ import java.util.stream.Collectors; * @since 4.0.2 */ @SuppressWarnings({"unchecked", "rawtypes"}) -public class EnumConverter extends AbstractConverter { +public class EnumConverter extends AbstractConverter { private static final long serialVersionUID = 1L; private static final WeakConcurrentMap, Map, Method>> VALUE_OF_METHOD_CACHE = new WeakConcurrentMap<>(); @@ -39,7 +39,7 @@ public class EnumConverter extends AbstractConverter { } @Override - protected Object convertInternal(final Object value) { + protected Object convertInternal(final Class targetClass, final Object value) { Enum enumValue = tryConvertEnum(value, this.enumClass); if (null == enumValue && false == value instanceof String) { // 最后尝试先将value转String,再valueOf转换 @@ -53,11 +53,6 @@ public class EnumConverter extends AbstractConverter { throw new ConvertException("Can not convert {} to {}", value, this.enumClass); } - @Override - public Class getTargetType() { - return this.enumClass; - } - /** * 尝试转换,转换规则为: *
    diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/LocaleConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/LocaleConverter.java index 65e083d53..70b4279dd 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/LocaleConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/LocaleConverter.java @@ -1,10 +1,10 @@ package cn.hutool.core.convert.impl; -import java.util.Locale; - import cn.hutool.core.convert.AbstractConverter; import cn.hutool.core.text.StrUtil; +import java.util.Locale; + /** * * {@link Locale}对象转换器
    @@ -13,11 +13,11 @@ import cn.hutool.core.text.StrUtil; * @author Looly * @since 4.5.2 */ -public class LocaleConverter extends AbstractConverter { +public class LocaleConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected Locale convertInternal(final Object value) { + protected Locale convertInternal(final Class targetClass, final Object value) { try { final String str = convertToStr(value); if (StrUtil.isEmpty(str)) { diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java index 342d2bb4b..dff43fd2d 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java @@ -17,7 +17,7 @@ import java.util.Objects; * @author Looly * @since 3.0.8 */ -public class MapConverter extends AbstractConverter> { +public class MapConverter extends AbstractConverter { private static final long serialVersionUID = 1L; /** Map类型 */ @@ -51,7 +51,7 @@ public class MapConverter extends AbstractConverter> { @Override @SuppressWarnings({ "rawtypes", "unchecked" }) - protected Map convertInternal(final Object value) { + protected Map convertInternal(final Class targetClass, final Object value) { Map map; if (value instanceof Map) { final Class valueClass = value.getClass(); @@ -70,7 +70,7 @@ public class MapConverter extends AbstractConverter> { } else if (BeanUtil.isBean(value.getClass())) { map = BeanUtil.beanToMap(value); // 二次转换,转换键值类型 - map = convertInternal(map); + map = convertInternal(targetClass, map); } else { throw new UnsupportedOperationException(StrUtil.format("Unsupport toMap value type: {}", value.getClass().getName())); } @@ -91,10 +91,4 @@ public class MapConverter extends AbstractConverter> { targetMap.put(key, value); }); } - - @Override - @SuppressWarnings("unchecked") - public Class> getTargetType() { - return (Class>) TypeUtil.getClass(this.mapType); - } } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/NumberConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/NumberConverter.java index dcefd85e0..2858fc453 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/NumberConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/NumberConverter.java @@ -36,7 +36,7 @@ import java.util.function.Function; * * @author Looly */ -public class NumberConverter extends AbstractConverter { +public class NumberConverter extends AbstractConverter { private static final long serialVersionUID = 1L; private final Class targetType; @@ -55,13 +55,7 @@ public class NumberConverter extends AbstractConverter { } @Override - @SuppressWarnings("unchecked") - public Class getTargetType() { - return (Class) this.targetType; - } - - @Override - protected Number convertInternal(final Object value) { + protected Number convertInternal(final Class targetClass, final Object value) { return convert(value, this.targetType, this::convertToStr); } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/OptConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/OptConverter.java index 763bca69c..ff4c31359 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/OptConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/OptConverter.java @@ -10,11 +10,11 @@ import cn.hutool.core.lang.Opt; * @author Looly * @since 5.7.16 */ -public class OptConverter extends AbstractConverter> { +public class OptConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected Opt convertInternal(final Object value) { + protected Opt convertInternal(final Class targetClass, final Object value) { return Opt.ofNullable(value); } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/OptionalConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/OptionalConverter.java index 454cdb241..37e22af1c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/OptionalConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/OptionalConverter.java @@ -11,11 +11,11 @@ import java.util.Optional; * @author Looly * @since 5.0.0 */ -public class OptionalConverter extends AbstractConverter> { +public class OptionalConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected Optional convertInternal(final Object value) { + protected Optional convertInternal(final Class targetClass, final Object value) { return Optional.ofNullable(value); } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/PathConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/PathConverter.java index 54e685b9c..1d8ed6e0c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/PathConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/PathConverter.java @@ -1,23 +1,23 @@ package cn.hutool.core.convert.impl; +import cn.hutool.core.convert.AbstractConverter; + import java.io.File; import java.net.URI; import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; -import cn.hutool.core.convert.AbstractConverter; - /** * 字符串转换器 * @author Looly * */ -public class PathConverter extends AbstractConverter{ +public class PathConverter extends AbstractConverter{ private static final long serialVersionUID = 1L; @Override - protected Path convertInternal(final Object value) { + protected Path convertInternal(final Class targetClass, final Object value) { try { if(value instanceof URI){ return Paths.get((URI)value); diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/PeriodConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/PeriodConverter.java index c884aee5e..0edd3d1c9 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/PeriodConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/PeriodConverter.java @@ -12,11 +12,11 @@ import java.time.temporal.TemporalAmount; * @author Looly * @since 5.0.0 */ -public class PeriodConverter extends AbstractConverter { +public class PeriodConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected Period convertInternal(final Object value) { + protected Period convertInternal(final Class targetClass, final Object value) { if(value instanceof TemporalAmount){ return Period.from((TemporalAmount) value); }else if(value instanceof Integer){ diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/PrimitiveConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/PrimitiveConverter.java index d471682e1..7f905c69b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/PrimitiveConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/PrimitiveConverter.java @@ -24,29 +24,20 @@ import java.util.function.Function; * * @author Looly */ -public class PrimitiveConverter extends AbstractConverter { +public class PrimitiveConverter extends AbstractConverter { private static final long serialVersionUID = 1L; - private final Class targetType; - /** * 构造
    * - * @param clazz 需要转换的原始 * @throws IllegalArgumentException 传入的转换类型非原始类型时抛出 */ - public PrimitiveConverter(final Class clazz) { - if (null == clazz) { - throw new NullPointerException("PrimitiveConverter not allow null target type!"); - } else if (false == clazz.isPrimitive()) { - throw new IllegalArgumentException("[" + clazz + "] is not a primitive class!"); - } - this.targetType = clazz; + public PrimitiveConverter() { } @Override - protected Object convertInternal(final Object value) { - return PrimitiveConverter.convert(value, this.targetType, this::convertToStr); + protected Object convertInternal(final Class targetClass, final Object value) { + return PrimitiveConverter.convert(value, targetClass, this::convertToStr); } @Override @@ -54,12 +45,6 @@ public class PrimitiveConverter extends AbstractConverter { return StrUtil.trim(super.convertToStr(value)); } - @Override - @SuppressWarnings("unchecked") - public Class getTargetType() { - return (Class) this.targetType; - } - /** * 将指定值转换为原始类型的值 * @param value 值 diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/ReferenceConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/ReferenceConverter.java index 43f7630c1..53ef0d1bc 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/ReferenceConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/ReferenceConverter.java @@ -17,7 +17,7 @@ import java.lang.reflect.Type; * @since 3.0.8 */ @SuppressWarnings("rawtypes") -public class ReferenceConverter extends AbstractConverter { +public class ReferenceConverter extends AbstractConverter { private static final long serialVersionUID = 1L; private final Class targetType; @@ -32,7 +32,7 @@ public class ReferenceConverter extends AbstractConverter { @SuppressWarnings("unchecked") @Override - protected Reference convertInternal(final Object value) { + protected Reference convertInternal(final Class targetClass, final Object value) { //尝试将值转换为Reference泛型的类型 Object targetValue = null; diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/StackTraceElementConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/StackTraceElementConverter.java index 44c99aee2..7c915a6aa 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/StackTraceElementConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/StackTraceElementConverter.java @@ -1,11 +1,11 @@ package cn.hutool.core.convert.impl; -import java.util.Map; - import cn.hutool.core.convert.AbstractConverter; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjUtil; +import java.util.Map; + /** * {@link StackTraceElement} 转换器
    * 只支持Map方式转换 @@ -13,11 +13,11 @@ import cn.hutool.core.util.ObjUtil; * @author Looly * @since 3.0.8 */ -public class StackTraceElementConverter extends AbstractConverter { +public class StackTraceElementConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected StackTraceElement convertInternal(final Object value) { + protected StackTraceElement convertInternal(final Class targetClass, final Object value) { if (value instanceof Map) { final Map map = (Map) value; diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/StringConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/StringConverter.java index c22f78145..90787fa4e 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/StringConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/StringConverter.java @@ -19,11 +19,11 @@ import java.util.TimeZone; * * @author Looly */ -public class StringConverter extends AbstractConverter { +public class StringConverter extends AbstractConverter { private static final long serialVersionUID = 1L; @Override - protected String convertInternal(final Object value) { + protected String convertInternal(final Class targetClass, final Object value) { if (value instanceof TimeZone) { return ((TimeZone) value).getID(); } else if (value instanceof org.w3c.dom.Node) { 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 131095721..99a37c6e4 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 @@ -37,10 +37,9 @@ import java.util.Objects; * @author looly * @since 5.0.0 */ -public class TemporalAccessorConverter extends AbstractConverter { +public class TemporalAccessorConverter extends AbstractConverter { private static final long serialVersionUID = 1L; - private final Class targetType; /** * 日期格式化 */ @@ -49,20 +48,9 @@ public class TemporalAccessorConverter extends AbstractConverter targetType) { - this(targetType, null); - } - - /** - * 构造 - * - * @param targetType 目标类型 * @param format 日期格式 */ - public TemporalAccessorConverter(final Class targetType, final String format) { - this.targetType = targetType; + public TemporalAccessorConverter(final String format) { this.format = format; } @@ -84,26 +72,20 @@ public class TemporalAccessorConverter extends AbstractConverter getTargetType() { - return (Class) this.targetType; - } - - @Override - protected TemporalAccessor convertInternal(final Object value) { + protected TemporalAccessor convertInternal(final Class targetClass, final Object value) { if (value instanceof Long) { - return parseFromLong((Long) value); + return parseFromLong(targetClass, (Long) value); } else if (value instanceof TemporalAccessor) { - return parseFromTemporalAccessor((TemporalAccessor) value); + return parseFromTemporalAccessor(targetClass, (TemporalAccessor) value); } else if (value instanceof Date) { final DateTime dateTime = DateUtil.date((Date) value); - return parseFromInstant(dateTime.toInstant(), dateTime.getZoneId()); + return parseFromInstant(targetClass, dateTime.toInstant(), dateTime.getZoneId()); } else if (value instanceof Calendar) { final Calendar calendar = (Calendar) value; - return parseFromInstant(calendar.toInstant(), calendar.getTimeZone().toZoneId()); + return parseFromInstant(targetClass, calendar.toInstant(), calendar.getTimeZone().toZoneId()); } else { - return parseFromCharSequence(convertToStr(value)); + return parseFromCharSequence(targetClass, convertToStr(value)); } } @@ -113,7 +95,7 @@ public class TemporalAccessorConverter extends AbstractConverter targetClass, final CharSequence value) { if (StrUtil.isBlank(value)) { return null; } @@ -129,17 +111,18 @@ public class TemporalAccessorConverter extends AbstractConverter targetClass, final Long time) { + return parseFromInstant(targetClass, Instant.ofEpochMilli(time), null); } /** @@ -148,16 +131,16 @@ public class TemporalAccessorConverter extends AbstractConverter targetClass, final TemporalAccessor temporalAccessor) { TemporalAccessor result = null; if (temporalAccessor instanceof LocalDateTime) { - result = parseFromLocalDateTime((LocalDateTime) temporalAccessor); + result = parseFromLocalDateTime(targetClass, (LocalDateTime) temporalAccessor); } else if (temporalAccessor instanceof ZonedDateTime) { - result = parseFromZonedDateTime((ZonedDateTime) temporalAccessor); + result = parseFromZonedDateTime(targetClass, (ZonedDateTime) temporalAccessor); } if (null == result) { - result = parseFromInstant(DateUtil.toInstant(temporalAccessor), null); + result = parseFromInstant(targetClass, DateUtil.toInstant(temporalAccessor), null); } return result; @@ -166,26 +149,27 @@ public class TemporalAccessorConverter extends AbstractConverter targetClass, final LocalDateTime localDateTime) { + if (Instant.class.equals(targetClass)) { return DateUtil.toInstant(localDateTime); } - if (LocalDate.class.equals(this.targetType)) { + if (LocalDate.class.equals(targetClass)) { return localDateTime.toLocalDate(); } - if (LocalTime.class.equals(this.targetType)) { + if (LocalTime.class.equals(targetClass)) { return localDateTime.toLocalTime(); } - if (ZonedDateTime.class.equals(this.targetType)) { + if (ZonedDateTime.class.equals(targetClass)) { return localDateTime.atZone(ZoneId.systemDefault()); } - if (OffsetDateTime.class.equals(this.targetType)) { + if (OffsetDateTime.class.equals(targetClass)) { return localDateTime.atZone(ZoneId.systemDefault()).toOffsetDateTime(); } - if (OffsetTime.class.equals(this.targetType)) { + if (OffsetTime.class.equals(targetClass)) { return localDateTime.atZone(ZoneId.systemDefault()).toOffsetDateTime().toOffsetTime(); } @@ -198,23 +182,23 @@ public class TemporalAccessorConverter extends AbstractConverter targetClass, final ZonedDateTime zonedDateTime) { + if (Instant.class.equals(targetClass)) { return DateUtil.toInstant(zonedDateTime); } - if (LocalDateTime.class.equals(this.targetType)) { + if (LocalDateTime.class.equals(targetClass)) { return zonedDateTime.toLocalDateTime(); } - if (LocalDate.class.equals(this.targetType)) { + if (LocalDate.class.equals(targetClass)) { return zonedDateTime.toLocalDate(); } - if (LocalTime.class.equals(this.targetType)) { + if (LocalTime.class.equals(targetClass)) { return zonedDateTime.toLocalTime(); } - if (OffsetDateTime.class.equals(this.targetType)) { + if (OffsetDateTime.class.equals(targetClass)) { return zonedDateTime.toOffsetDateTime(); } - if (OffsetTime.class.equals(this.targetType)) { + if (OffsetTime.class.equals(targetClass)) { return zonedDateTime.toOffsetDateTime().toOffsetTime(); } @@ -228,25 +212,25 @@ public class TemporalAccessorConverter extends AbstractConverter targetClass, final Instant instant, ZoneId zoneId) { + if (Instant.class.equals(targetClass)) { return instant; } zoneId = ObjUtil.defaultIfNull(zoneId, ZoneId::systemDefault); TemporalAccessor result = null; - if (LocalDateTime.class.equals(this.targetType)) { + if (LocalDateTime.class.equals(targetClass)) { result = LocalDateTime.ofInstant(instant, zoneId); - } else if (LocalDate.class.equals(this.targetType)) { + } else if (LocalDate.class.equals(targetClass)) { result = instant.atZone(zoneId).toLocalDate(); - } else if (LocalTime.class.equals(this.targetType)) { + } else if (LocalTime.class.equals(targetClass)) { result = instant.atZone(zoneId).toLocalTime(); - } else if (ZonedDateTime.class.equals(this.targetType)) { + } else if (ZonedDateTime.class.equals(targetClass)) { result = instant.atZone(zoneId); - } else if (OffsetDateTime.class.equals(this.targetType)) { + } else if (OffsetDateTime.class.equals(targetClass)) { result = OffsetDateTime.ofInstant(instant, zoneId); - } else if (OffsetTime.class.equals(this.targetType)) { + } else if (OffsetTime.class.equals(targetClass)) { result = OffsetTime.ofInstant(instant, zoneId); } return result; diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/TimeZoneConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/TimeZoneConverter.java index 3981ac855..9e74fe8c8 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/TimeZoneConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/TimeZoneConverter.java @@ -1,19 +1,19 @@ package cn.hutool.core.convert.impl; -import java.util.TimeZone; - import cn.hutool.core.convert.AbstractConverter; +import java.util.TimeZone; + /** * TimeZone转换器 * @author Looly * */ -public class TimeZoneConverter extends AbstractConverter{ +public class TimeZoneConverter extends AbstractConverter{ private static final long serialVersionUID = 1L; @Override - protected TimeZone convertInternal(final Object value) { + protected TimeZone convertInternal(final Class targetClass, final Object value) { return TimeZone.getTimeZone(convertToStr(value)); } diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/URIConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/URIConverter.java index 3f945748b..f6ba1e83c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/URIConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/URIConverter.java @@ -1,21 +1,21 @@ package cn.hutool.core.convert.impl; +import cn.hutool.core.convert.AbstractConverter; + import java.io.File; import java.net.URI; import java.net.URL; -import cn.hutool.core.convert.AbstractConverter; - /** * URI对象转换器 * @author Looly * */ -public class URIConverter extends AbstractConverter{ +public class URIConverter extends AbstractConverter{ private static final long serialVersionUID = 1L; @Override - protected URI convertInternal(final Object value) { + protected URI convertInternal(final Class targetClass, final Object value) { try { if(value instanceof File){ return ((File)value).toURI(); diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/URLConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/URLConverter.java index 03198b545..84eb182c7 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/URLConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/URLConverter.java @@ -1,21 +1,21 @@ package cn.hutool.core.convert.impl; +import cn.hutool.core.convert.AbstractConverter; + import java.io.File; import java.net.URI; import java.net.URL; -import cn.hutool.core.convert.AbstractConverter; - /** * URL对象转换器 * @author Looly * */ -public class URLConverter extends AbstractConverter{ +public class URLConverter extends AbstractConverter{ private static final long serialVersionUID = 1L; @Override - protected URL convertInternal(final Object value) { + protected URL convertInternal(final Class targetClass, final Object value) { try { if(value instanceof File){ return ((File)value).toURI().toURL(); diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/UUIDConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/UUIDConverter.java index ea2236852..9d2ddf566 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/UUIDConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/UUIDConverter.java @@ -1,9 +1,9 @@ package cn.hutool.core.convert.impl; -import java.util.UUID; - import cn.hutool.core.convert.AbstractConverter; +import java.util.UUID; + /** * UUID对象转换器转换器 * @@ -11,11 +11,13 @@ import cn.hutool.core.convert.AbstractConverter; * @since 4.0.10 * */ -public class UUIDConverter extends AbstractConverter { +public class UUIDConverter extends AbstractConverter { private static final long serialVersionUID = 1L; + + @Override - protected UUID convertInternal(final Object value) { + protected UUID convertInternal(final Class targetClass, final Object value) { return UUID.fromString(convertToStr(value)); } diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/ansi/AnsiEncoder.java b/hutool-core/src/main/java/cn/hutool/core/lang/ansi/AnsiEncoder.java index deb0b3b8f..e58cbe2fb 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/ansi/AnsiEncoder.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/ansi/AnsiEncoder.java @@ -4,7 +4,6 @@ package cn.hutool.core.lang.ansi; * 生成ANSI格式的编码输出 * * @author Phillip Webb - * @since 1.0.0 */ public abstract class AnsiEncoder { diff --git a/hutool-core/src/main/java/cn/hutool/core/reflect/ReflectUtil.java b/hutool-core/src/main/java/cn/hutool/core/reflect/ReflectUtil.java index fe4d3160a..cb5b4489e 100644 --- a/hutool-core/src/main/java/cn/hutool/core/reflect/ReflectUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/reflect/ReflectUtil.java @@ -41,7 +41,9 @@ public class ReflectUtil { *
  • {@code ReflectUtil.getDescriptor(Object.class.getMethod("equals", Object.class)) // "(Ljava/lang/Object;)Z"}
  • *
  • {@code ReflectUtil.getDescriptor(ReflectUtil.class.getDeclaredMethod("appendDescriptor", Class.clas, StringBuilder.class)) // "(Ljava/lang/Class;Ljava/lang/StringBuilder;)V"}
  • *
  • {@code ReflectUtil.getDescriptor(ArrayUtil.class.getMethod("isEmpty", Object[].class)) // "([Ljava/lang/Object;)Z"}
  • - * Object.class.getMethod("hashCode") + * + * + * Object.class.getMethod("hashCode") */ public static String getDescriptor(Executable executable) { StringBuilder stringBuilder = new StringBuilder(); @@ -75,7 +77,7 @@ public class ReflectUtil { currentClass = currentClass.getComponentType()) { stringBuilder.append('['); } - if (ClassUtil.isBasicType(currentClass)) { + if (currentClass.isPrimitive()) { stringBuilder.append(getDescriptorChar(currentClass)); } else { stringBuilder.append('L').append(currentClass.getName().replace('.', '/')).append(';'); diff --git a/hutool-log/src/main/java/cn/hutool/log/dialect/console/ConsoleColorLog.java b/hutool-log/src/main/java/cn/hutool/log/dialect/console/ConsoleColorLog.java index cab4902a7..61b3bb0be 100755 --- a/hutool-log/src/main/java/cn/hutool/log/dialect/console/ConsoleColorLog.java +++ b/hutool-log/src/main/java/cn/hutool/log/dialect/console/ConsoleColorLog.java @@ -16,6 +16,7 @@ import java.util.function.Function; * @since 5.8.0 */ public class ConsoleColorLog extends ConsoleLog { + private static final long serialVersionUID = 1L; /** * 控制台打印类名的颜色代码