mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
修复NumberWithFormat导致转换Long异常问题
This commit is contained in:
@@ -14,6 +14,7 @@ import java.util.Date;
|
||||
* @since 5.8.13
|
||||
*/
|
||||
public class NumberWithFormat extends Number implements TypeConverter{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final Number number;
|
||||
private final String format;
|
||||
@@ -31,7 +32,8 @@ public class NumberWithFormat extends Number implements TypeConverter{
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Object convert(Type targetType, Object value) {
|
||||
if (targetType instanceof Class) {
|
||||
// 自定义日期格式
|
||||
if (null != this.format && targetType instanceof Class) {
|
||||
final Class<?> clazz = (Class<?>) targetType;
|
||||
// https://gitee.com/dromara/hutool/issues/I6IS5B
|
||||
if (Date.class.isAssignableFrom(clazz)) {
|
||||
@@ -41,8 +43,12 @@ public class NumberWithFormat extends Number implements TypeConverter{
|
||||
} else if(String.class == clazz){
|
||||
return toString();
|
||||
}
|
||||
|
||||
// 其他情况按照正常数字转换
|
||||
}
|
||||
throw new ConvertException("Unsupported target type {}", targetType);
|
||||
|
||||
// 按照正常数字转换
|
||||
return Convert.convertWithCheck(targetType, this.number, null, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -41,6 +41,9 @@ public class NumberConverter extends AbstractConverter<Number> {
|
||||
|
||||
private final Class<? extends Number> targetType;
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*/
|
||||
public NumberConverter() {
|
||||
this.targetType = Number.class;
|
||||
}
|
||||
@@ -67,7 +70,7 @@ public class NumberConverter extends AbstractConverter<Number> {
|
||||
|
||||
@Override
|
||||
protected String convertToStr(Object value) {
|
||||
String result = StrUtil.trim(super.convertToStr(value));
|
||||
final String result = StrUtil.trim(super.convertToStr(value));
|
||||
if (null != result && result.length() > 1) {
|
||||
final char c = Character.toUpperCase(result.charAt(result.length() - 1));
|
||||
if (c == 'D' || c == 'L' || c == 'F') {
|
||||
|
@@ -1,11 +1,11 @@
|
||||
package cn.hutool.core.getter;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Date;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
|
||||
/**
|
||||
* 基本类型的getter接口抽象实现,所有类型的值获取都是通过将String转换而来<br>
|
||||
* 用户只需实现getStr方法即可,其他类型将会从String结果中转换 在不提供默认值的情况下, 如果值不存在或获取错误,返回null<br>
|
||||
|
@@ -17,13 +17,7 @@ import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicIntegerArray;
|
||||
import java.util.concurrent.atomic.AtomicLongArray;
|
||||
import java.util.concurrent.atomic.DoubleAdder;
|
||||
@@ -143,6 +137,13 @@ public class ConvertTest {
|
||||
Assert.assertEquals(8, dLong2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toLongFromNumberWithFormatTest() {
|
||||
final NumberWithFormat value = new NumberWithFormat(1678285713935L, null);
|
||||
final Long aLong = Convert.convertWithCheck(Long.class, value, null, false);
|
||||
Assert.assertEquals(new Long(1678285713935L), aLong);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toCharTest() {
|
||||
final String str = "aadfdsfs";
|
||||
|
Reference in New Issue
Block a user