|
@@ -1,6 +1,7 @@
|
|
|
package cn.hutool.core.convert.impl;
|
|
package cn.hutool.core.convert.impl;
|
|
|
|
|
|
|
|
import cn.hutool.core.convert.AbstractConverter;
|
|
import cn.hutool.core.convert.AbstractConverter;
|
|
|
|
|
+import cn.hutool.core.convert.ConvertException;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.BooleanUtil;
|
|
import cn.hutool.core.util.BooleanUtil;
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
import cn.hutool.core.util.NumberUtil;
|
|
@@ -48,117 +49,114 @@ public class PrimitiveConverter extends AbstractConverter<Object> {
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
protected Object convertInternal(Object value) {
|
|
protected Object convertInternal(Object value) {
|
|
|
- try {
|
|
|
|
|
- if (byte.class == this.targetType) {
|
|
|
|
|
- if (value instanceof Number) {
|
|
|
|
|
- return ((Number) value).byteValue();
|
|
|
|
|
- } else if (value instanceof Boolean) {
|
|
|
|
|
- return BooleanUtil.toByte((Boolean) value);
|
|
|
|
|
- }
|
|
|
|
|
- final String valueStr = convertToStr(value);
|
|
|
|
|
- if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
- return 0;
|
|
|
|
|
- }
|
|
|
|
|
- return Byte.parseByte(valueStr);
|
|
|
|
|
-
|
|
|
|
|
- } else if (short.class == this.targetType) {
|
|
|
|
|
- if (value instanceof Number) {
|
|
|
|
|
- return ((Number) value).shortValue();
|
|
|
|
|
- } else if (value instanceof Boolean) {
|
|
|
|
|
- return BooleanUtil.toShort((Boolean) value);
|
|
|
|
|
- }
|
|
|
|
|
- final String valueStr = convertToStr(value);
|
|
|
|
|
- if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
- return 0;
|
|
|
|
|
- }
|
|
|
|
|
- return Short.parseShort(valueStr);
|
|
|
|
|
-
|
|
|
|
|
- } else if (int.class == this.targetType) {
|
|
|
|
|
- if (value instanceof Number) {
|
|
|
|
|
- return ((Number) value).intValue();
|
|
|
|
|
- } else if (value instanceof Boolean) {
|
|
|
|
|
- return BooleanUtil.toInt((Boolean) value);
|
|
|
|
|
- } else if (value instanceof Date) {
|
|
|
|
|
- return ((Date) value).getTime();
|
|
|
|
|
- } else if (value instanceof Calendar) {
|
|
|
|
|
- return ((Calendar) value).getTimeInMillis();
|
|
|
|
|
- } else if (value instanceof TemporalAccessor) {
|
|
|
|
|
- return DateUtil.toInstant((TemporalAccessor) value).toEpochMilli();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- final String valueStr = convertToStr(value);
|
|
|
|
|
- if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
- return 0;
|
|
|
|
|
- }
|
|
|
|
|
- return NumberUtil.parseInt(valueStr);
|
|
|
|
|
-
|
|
|
|
|
- } else if (long.class == this.targetType) {
|
|
|
|
|
- if (value instanceof Number) {
|
|
|
|
|
- return ((Number) value).longValue();
|
|
|
|
|
- } else if (value instanceof Boolean) {
|
|
|
|
|
- return BooleanUtil.toLong((Boolean) value);
|
|
|
|
|
- } else if (value instanceof Date) {
|
|
|
|
|
- return ((Date) value).getTime();
|
|
|
|
|
- } else if (value instanceof Calendar) {
|
|
|
|
|
- return ((Calendar) value).getTimeInMillis();
|
|
|
|
|
- } else if (value instanceof TemporalAccessor) {
|
|
|
|
|
- return DateUtil.toInstant((TemporalAccessor) value).toEpochMilli();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- final String valueStr = convertToStr(value);
|
|
|
|
|
- if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
- return 0;
|
|
|
|
|
- }
|
|
|
|
|
- return NumberUtil.parseLong(valueStr);
|
|
|
|
|
-
|
|
|
|
|
- } else if (float.class == this.targetType) {
|
|
|
|
|
- if (value instanceof Number) {
|
|
|
|
|
- return ((Number) value).floatValue();
|
|
|
|
|
- } else if (value instanceof Boolean) {
|
|
|
|
|
- return BooleanUtil.toFloat((Boolean) value);
|
|
|
|
|
- }
|
|
|
|
|
- final String valueStr = convertToStr(value);
|
|
|
|
|
- if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
- return 0;
|
|
|
|
|
- }
|
|
|
|
|
- return Float.parseFloat(valueStr);
|
|
|
|
|
-
|
|
|
|
|
- } else if (double.class == this.targetType) {
|
|
|
|
|
- if (value instanceof Number) {
|
|
|
|
|
- return ((Number) value).doubleValue();
|
|
|
|
|
- } else if (value instanceof Boolean) {
|
|
|
|
|
- return BooleanUtil.toDouble((Boolean) value);
|
|
|
|
|
- }
|
|
|
|
|
- final String valueStr = convertToStr(value);
|
|
|
|
|
- if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
- return 0;
|
|
|
|
|
- }
|
|
|
|
|
- return Double.parseDouble(valueStr);
|
|
|
|
|
-
|
|
|
|
|
- } else if (char.class == this.targetType) {
|
|
|
|
|
- if (value instanceof Character) {
|
|
|
|
|
- //noinspection UnnecessaryUnboxing
|
|
|
|
|
- return ((Character) value).charValue();
|
|
|
|
|
- } else if (value instanceof Boolean) {
|
|
|
|
|
- return BooleanUtil.toChar((Boolean) value);
|
|
|
|
|
- }
|
|
|
|
|
- final String valueStr = convertToStr(value);
|
|
|
|
|
- if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
- return 0;
|
|
|
|
|
- }
|
|
|
|
|
- return valueStr.charAt(0);
|
|
|
|
|
- } else if (boolean.class == this.targetType) {
|
|
|
|
|
- if (value instanceof Boolean) {
|
|
|
|
|
- //noinspection UnnecessaryUnboxing
|
|
|
|
|
- return ((Boolean) value).booleanValue();
|
|
|
|
|
- }
|
|
|
|
|
- String valueStr = convertToStr(value);
|
|
|
|
|
- return BooleanUtil.toBoolean(valueStr);
|
|
|
|
|
|
|
+ if (byte.class == this.targetType) {
|
|
|
|
|
+ if (value instanceof Number) {
|
|
|
|
|
+ return ((Number) value).byteValue();
|
|
|
|
|
+ } else if (value instanceof Boolean) {
|
|
|
|
|
+ return BooleanUtil.toByte((Boolean) value);
|
|
|
}
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- // Ignore Exception
|
|
|
|
|
|
|
+ final String valueStr = convertToStr(value);
|
|
|
|
|
+ if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ return Byte.parseByte(valueStr);
|
|
|
|
|
+
|
|
|
|
|
+ } else if (short.class == this.targetType) {
|
|
|
|
|
+ if (value instanceof Number) {
|
|
|
|
|
+ return ((Number) value).shortValue();
|
|
|
|
|
+ } else if (value instanceof Boolean) {
|
|
|
|
|
+ return BooleanUtil.toShort((Boolean) value);
|
|
|
|
|
+ }
|
|
|
|
|
+ final String valueStr = convertToStr(value);
|
|
|
|
|
+ if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ return Short.parseShort(valueStr);
|
|
|
|
|
+
|
|
|
|
|
+ } else if (int.class == this.targetType) {
|
|
|
|
|
+ if (value instanceof Number) {
|
|
|
|
|
+ return ((Number) value).intValue();
|
|
|
|
|
+ } else if (value instanceof Boolean) {
|
|
|
|
|
+ return BooleanUtil.toInt((Boolean) value);
|
|
|
|
|
+ } else if (value instanceof Date) {
|
|
|
|
|
+ return ((Date) value).getTime();
|
|
|
|
|
+ } else if (value instanceof Calendar) {
|
|
|
|
|
+ return ((Calendar) value).getTimeInMillis();
|
|
|
|
|
+ } else if (value instanceof TemporalAccessor) {
|
|
|
|
|
+ return DateUtil.toInstant((TemporalAccessor) value).toEpochMilli();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ final String valueStr = convertToStr(value);
|
|
|
|
|
+ if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ return NumberUtil.parseInt(valueStr);
|
|
|
|
|
+
|
|
|
|
|
+ } else if (long.class == this.targetType) {
|
|
|
|
|
+ if (value instanceof Number) {
|
|
|
|
|
+ return ((Number) value).longValue();
|
|
|
|
|
+ } else if (value instanceof Boolean) {
|
|
|
|
|
+ return BooleanUtil.toLong((Boolean) value);
|
|
|
|
|
+ } else if (value instanceof Date) {
|
|
|
|
|
+ return ((Date) value).getTime();
|
|
|
|
|
+ } else if (value instanceof Calendar) {
|
|
|
|
|
+ return ((Calendar) value).getTimeInMillis();
|
|
|
|
|
+ } else if (value instanceof TemporalAccessor) {
|
|
|
|
|
+ return DateUtil.toInstant((TemporalAccessor) value).toEpochMilli();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ final String valueStr = convertToStr(value);
|
|
|
|
|
+ if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ return NumberUtil.parseLong(valueStr);
|
|
|
|
|
+
|
|
|
|
|
+ } else if (float.class == this.targetType) {
|
|
|
|
|
+ if (value instanceof Number) {
|
|
|
|
|
+ return ((Number) value).floatValue();
|
|
|
|
|
+ } else if (value instanceof Boolean) {
|
|
|
|
|
+ return BooleanUtil.toFloat((Boolean) value);
|
|
|
|
|
+ }
|
|
|
|
|
+ final String valueStr = convertToStr(value);
|
|
|
|
|
+ if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ return Float.parseFloat(valueStr);
|
|
|
|
|
+
|
|
|
|
|
+ } else if (double.class == this.targetType) {
|
|
|
|
|
+ if (value instanceof Number) {
|
|
|
|
|
+ return ((Number) value).doubleValue();
|
|
|
|
|
+ } else if (value instanceof Boolean) {
|
|
|
|
|
+ return BooleanUtil.toDouble((Boolean) value);
|
|
|
|
|
+ }
|
|
|
|
|
+ final String valueStr = convertToStr(value);
|
|
|
|
|
+ if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ return Double.parseDouble(valueStr);
|
|
|
|
|
+
|
|
|
|
|
+ } else if (char.class == this.targetType) {
|
|
|
|
|
+ if (value instanceof Character) {
|
|
|
|
|
+ //noinspection UnnecessaryUnboxing
|
|
|
|
|
+ return ((Character) value).charValue();
|
|
|
|
|
+ } else if (value instanceof Boolean) {
|
|
|
|
|
+ return BooleanUtil.toChar((Boolean) value);
|
|
|
|
|
+ }
|
|
|
|
|
+ final String valueStr = convertToStr(value);
|
|
|
|
|
+ if (StrUtil.isBlank(valueStr)) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ return valueStr.charAt(0);
|
|
|
|
|
+ } else if (boolean.class == this.targetType) {
|
|
|
|
|
+ if (value instanceof Boolean) {
|
|
|
|
|
+ //noinspection UnnecessaryUnboxing
|
|
|
|
|
+ return ((Boolean) value).booleanValue();
|
|
|
|
|
+ }
|
|
|
|
|
+ final String valueStr = convertToStr(value);
|
|
|
|
|
+ return BooleanUtil.toBoolean(valueStr);
|
|
|
}
|
|
}
|
|
|
- return 0;
|
|
|
|
|
|
|
+
|
|
|
|
|
+ throw new ConvertException("Unsupported target type: {}", this.targetType);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|