diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/DynaBean.java b/hutool-core/src/main/java/cn/hutool/core/bean/DynaBean.java index 2c755e532..e5ef5e2cf 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/DynaBean.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/DynaBean.java @@ -1,6 +1,6 @@ package cn.hutool.core.bean; -import cn.hutool.core.clone.CloneSupport; +import cn.hutool.core.exceptions.CloneRuntimeException; import cn.hutool.core.lang.Assert; import cn.hutool.core.reflect.ClassUtil; import cn.hutool.core.reflect.ConstructorUtil; @@ -16,7 +16,7 @@ import java.util.Map; * @author Looly * @since 3.0.7 */ -public class DynaBean extends CloneSupport implements Serializable { +public class DynaBean implements Cloneable, Serializable { private static final long serialVersionUID = 1L; private final Class beanClass; @@ -224,4 +224,13 @@ public class DynaBean extends CloneSupport implements Serializable { public String toString() { return this.bean.toString(); } + + @Override + public DynaBean clone() { + try { + return (DynaBean) super.clone(); + } catch (final CloneNotSupportedException e) { + throw new CloneRuntimeException(e); + } + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/clone/CloneSupport.java b/hutool-core/src/main/java/cn/hutool/core/clone/CloneSupport.java deleted file mode 100644 index 777cd6ea0..000000000 --- a/hutool-core/src/main/java/cn/hutool/core/clone/CloneSupport.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.hutool.core.clone; - -/** - * 克隆支持类,提供默认的克隆方法 - * @author Looly - * - * @param 继承类的类型 - */ -public class CloneSupport implements Cloneable{ - - @SuppressWarnings("unchecked") - @Override - public T clone() { - try { - return (T) super.clone(); - } catch (final CloneNotSupportedException e) { - throw new CloneRuntimeException(e); - } - } - -} diff --git a/hutool-core/src/main/java/cn/hutool/core/clone/Cloneable.java b/hutool-core/src/main/java/cn/hutool/core/clone/Cloneable.java deleted file mode 100644 index 5fdbb1b37..000000000 --- a/hutool-core/src/main/java/cn/hutool/core/clone/Cloneable.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.hutool.core.clone; - -/** - * 克隆支持接口 - * @author Looly - * - * @param 实现克隆接口的类型 - */ -public interface Cloneable extends java.lang.Cloneable{ - - /** - * 克隆当前对象,浅复制 - * @return 克隆后的对象 - */ - T clone(); -} diff --git a/hutool-core/src/main/java/cn/hutool/core/clone/DefaultCloneable.java b/hutool-core/src/main/java/cn/hutool/core/clone/DefaultCloneable.java deleted file mode 100644 index f58632711..000000000 --- a/hutool-core/src/main/java/cn/hutool/core/clone/DefaultCloneable.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.hutool.core.clone; - - -import cn.hutool.core.reflect.MethodUtil; - -/** - * 克隆默认实现接口,用于实现返回指定泛型类型的克隆方法 - * - * @param 泛型类型 - * @since 5.7.17 - */ -public interface DefaultCloneable extends java.lang.Cloneable { - - /** - * 浅拷贝,提供默认的泛型返回值的clone方法。 - * - * @return obj - */ - default T clone0() { - try { - return MethodUtil.invoke(this, "clone"); - } catch (final Exception e) { - throw new CloneRuntimeException(e); - } - } -} - - diff --git a/hutool-core/src/main/java/cn/hutool/core/clone/package-info.java b/hutool-core/src/main/java/cn/hutool/core/clone/package-info.java deleted file mode 100644 index a4530d996..000000000 --- a/hutool-core/src/main/java/cn/hutool/core/clone/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -/** - * 克隆封装 - * - * @author looly - * - */ -package cn.hutool.core.clone; \ No newline at end of file diff --git a/hutool-core/src/main/java/cn/hutool/core/clone/CloneRuntimeException.java b/hutool-core/src/main/java/cn/hutool/core/exceptions/CloneRuntimeException.java similarity index 96% rename from hutool-core/src/main/java/cn/hutool/core/clone/CloneRuntimeException.java rename to hutool-core/src/main/java/cn/hutool/core/exceptions/CloneRuntimeException.java index acd5bb42b..1c8b5a769 100644 --- a/hutool-core/src/main/java/cn/hutool/core/clone/CloneRuntimeException.java +++ b/hutool-core/src/main/java/cn/hutool/core/exceptions/CloneRuntimeException.java @@ -1,4 +1,4 @@ -package cn.hutool.core.clone; +package cn.hutool.core.exceptions; import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.core.text.StrUtil; diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Tuple.java b/hutool-core/src/main/java/cn/hutool/core/lang/Tuple.java index 354c93188..0ccfb7b8b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Tuple.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Tuple.java @@ -1,8 +1,8 @@ package cn.hutool.core.lang; -import cn.hutool.core.clone.CloneSupport; -import cn.hutool.core.collection.iter.ArrayIter; import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.collection.iter.ArrayIter; +import cn.hutool.core.exceptions.CloneRuntimeException; import cn.hutool.core.util.ArrayUtil; import java.io.Serializable; @@ -20,7 +20,7 @@ import java.util.stream.StreamSupport; * * @author Looly */ -public class Tuple extends CloneSupport implements Iterable, Serializable { +public class Tuple implements Iterable, Serializable, Cloneable { private static final long serialVersionUID = -7689304393482182157L; private final Object[] members; @@ -176,4 +176,13 @@ public class Tuple extends CloneSupport implements Iterable, Seri public final Spliterator spliterator() { return Spliterators.spliterator(this.members, Spliterator.ORDERED); } + + @Override + public Tuple clone() { + try { + return (Tuple) super.clone(); + } catch (CloneNotSupportedException e) { + throw new CloneRuntimeException(e); + } + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java index fc28793f7..7c7c5f062 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java @@ -59,7 +59,7 @@ public class LambdaUtil { */ @SuppressWarnings("unchecked") public static Class getRealClass(final Serializable func) { - LambdaInfo lambdaInfo = resolve(func); + final LambdaInfo lambdaInfo = resolve(func); return (Class) Opt.of(lambdaInfo).map(LambdaInfo::getInstantiatedTypes).filter(types -> types.length != 0).map(types -> types[types.length - 1]).orElseGet(lambdaInfo::getClazz); } @@ -78,18 +78,18 @@ public class LambdaUtil { ClassLoaderUtil.loadClass(serializedLambda.getImplClass().replace("/", "."), true); try { implClass = Class.forName(serializedLambda.getImplClass().replace("/", "."), true, Thread.currentThread().getContextClassLoader()); - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { throw new UtilException(e); } if ("".equals(methodName)) { - for (Constructor constructor : implClass.getDeclaredConstructors()) { + for (final Constructor constructor : implClass.getDeclaredConstructors()) { if (ReflectUtil.getDescriptor(constructor).equals(serializedLambda.getImplMethodSignature())) { return new LambdaInfo(constructor, serializedLambda); } } } else { - Method[] methods = MethodUtil.getMethods(implClass); - for (Method method : methods) { + final Method[] methods = MethodUtil.getMethods(implClass); + for (final Method method : methods) { if (method.getName().equals(methodName) && ReflectUtil.getDescriptor(method).equals(serializedLambda.getImplMethodSignature())) { return new LambdaInfo(method, serializedLambda); diff --git a/hutool-core/src/test/java/cn/hutool/core/reflect/MethodUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/reflect/MethodUtilTest.java index ad3ab7c7a..370e631dc 100644 --- a/hutool-core/src/test/java/cn/hutool/core/reflect/MethodUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/reflect/MethodUtilTest.java @@ -6,6 +6,7 @@ import cn.hutool.core.lang.Console; import cn.hutool.core.lang.test.bean.ExamInfoDict; import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.SystemUtil; import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; @@ -13,10 +14,25 @@ import org.junit.Test; import java.lang.reflect.Method; public class MethodUtilTest { + private static final String JAVA_VERSION = SystemUtil.get("java.version", false); + private static final boolean isGteJdk15 = getJavaVersion() >= 15; + /** + * jdk版本:是否>= jdk15 + * jdk15: 删除了 object registerNatives + * @return 反馈jdk版本,如:7、8、11、15、17 + * @author dazer + */ + private static int getJavaVersion() { + if (JAVA_VERSION.startsWith("1.")) { + return Integer.parseInt(JAVA_VERSION.split("\\.")[1]); + } + return Integer.parseInt(JAVA_VERSION.split("\\.")[0]); + } + @Test public void getMethodsTest() { Method[] methods = MethodUtil.getMethods(ExamInfoDict.class); - Assert.assertEquals(20, methods.length); + Assert.assertEquals(isGteJdk15 ? 19 : 20, methods.length); //过滤器测试 methods = MethodUtil.getMethods(ExamInfoDict.class, t -> Integer.class.equals(t.getReturnType())); @@ -28,7 +44,7 @@ public class MethodUtilTest { //null过滤器测试 methods = MethodUtil.getMethods(ExamInfoDict.class, null); - Assert.assertEquals(20, methods.length); + Assert.assertEquals(isGteJdk15 ? 19 : 20, methods.length); final Method method2 = methods[0]; Assert.assertNotNull(method2); } @@ -110,7 +126,7 @@ public class MethodUtilTest { public void getMethodsFromClassExtends() { // 继承情况下,需解决方法去重问题 Method[] methods = MethodUtil.getMethods(ReflectUtilTest.C2.class); - Assert.assertEquals(15, methods.length); + Assert.assertEquals(isGteJdk15 ? 14 : 15, methods.length); // 排除Object中的方法 // 3个方法包括类 diff --git a/hutool-core/src/test/java/cn/hutool/core/clone/CloneTest.java b/hutool-core/src/test/java/cn/hutool/core/util/CloneTest.java similarity index 76% rename from hutool-core/src/test/java/cn/hutool/core/clone/CloneTest.java rename to hutool-core/src/test/java/cn/hutool/core/util/CloneTest.java index 2e68ca023..f7e9b575f 100644 --- a/hutool-core/src/test/java/cn/hutool/core/clone/CloneTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/CloneTest.java @@ -1,5 +1,6 @@ -package cn.hutool.core.clone; +package cn.hutool.core.util; +import cn.hutool.core.exceptions.CloneRuntimeException; import lombok.Data; import lombok.EqualsAndHashCode; import org.junit.Assert; @@ -36,7 +37,7 @@ public class CloneTest { * */ @Data - static class Cat implements Cloneable{ + static class Cat implements Cloneable{ private String name = "miaomiao"; private int age = 2; @@ -57,8 +58,17 @@ public class CloneTest { */ @EqualsAndHashCode(callSuper = false) @Data - static class Dog extends CloneSupport{ + static class Dog implements Cloneable{ private String name = "wangwang"; private int age = 3; + + @Override + public Dog clone() { + try { + return (Dog) super.clone(); + } catch (final CloneNotSupportedException e) { + throw new CloneRuntimeException(e); + } + } } } diff --git a/hutool-core/src/test/java/cn/hutool/core/clone/DefaultCloneTest.java b/hutool-core/src/test/java/cn/hutool/core/util/DefaultCloneTest.java similarity index 71% rename from hutool-core/src/test/java/cn/hutool/core/clone/DefaultCloneTest.java rename to hutool-core/src/test/java/cn/hutool/core/util/DefaultCloneTest.java index e82bbae51..822389b5c 100644 --- a/hutool-core/src/test/java/cn/hutool/core/clone/DefaultCloneTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/DefaultCloneTest.java @@ -1,6 +1,7 @@ -package cn.hutool.core.clone; +package cn.hutool.core.util; +import cn.hutool.core.exceptions.CloneRuntimeException; import lombok.AllArgsConstructor; import lombok.Data; import org.junit.Assert; @@ -18,7 +19,7 @@ public class DefaultCloneTest { oldCar.setId(1); oldCar.setWheelList(Stream.of(new Wheel("h")).collect(Collectors.toList())); - final Car newCar = oldCar.clone0(); + final Car newCar = oldCar.clone(); Assert.assertEquals(oldCar.getId(), newCar.getId()); Assert.assertEquals(oldCar.getWheelList(), newCar.getWheelList()); @@ -31,9 +32,18 @@ public class DefaultCloneTest { } @Data - static class Car implements DefaultCloneable { + static class Car implements Cloneable { private Integer id; private List wheelList; + + @Override + public Car clone() { + try { + return (Car) super.clone(); + } catch (final CloneNotSupportedException e) { + throw new CloneRuntimeException(e); + } + } } @Data diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java index ee8378516..bece315c2 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java @@ -1,9 +1,9 @@ package cn.hutool.core.util; -import cn.hutool.core.clone.CloneSupport; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.exceptions.CloneRuntimeException; import org.junit.Assert; import org.junit.Test; @@ -75,10 +75,19 @@ public class ObjUtilTest { Assert.assertEquals("OK", obj2.doSomeThing()); } - static class Obj extends CloneSupport { + static class Obj implements Cloneable { public String doSomeThing() { return "OK"; } + + @Override + public Obj clone() { + try { + return (Obj) super.clone(); + } catch (CloneNotSupportedException e) { + throw new CloneRuntimeException(e); + } + } } @Test diff --git a/hutool-db/src/main/java/cn/hutool/db/ds/DataSourceWrapper.java b/hutool-db/src/main/java/cn/hutool/db/ds/DataSourceWrapper.java index 0c9734752..e1e10e129 100644 --- a/hutool-db/src/main/java/cn/hutool/db/ds/DataSourceWrapper.java +++ b/hutool-db/src/main/java/cn/hutool/db/ds/DataSourceWrapper.java @@ -1,6 +1,6 @@ package cn.hutool.db.ds; -import cn.hutool.core.clone.CloneRuntimeException; +import cn.hutool.core.exceptions.CloneRuntimeException; import cn.hutool.core.io.IoUtil; import javax.sql.DataSource; diff --git a/hutool-db/src/main/java/cn/hutool/db/ds/simple/AbstractDataSource.java b/hutool-db/src/main/java/cn/hutool/db/ds/simple/AbstractDataSource.java index db595bc34..9eb5e580f 100644 --- a/hutool-db/src/main/java/cn/hutool/db/ds/simple/AbstractDataSource.java +++ b/hutool-db/src/main/java/cn/hutool/db/ds/simple/AbstractDataSource.java @@ -1,6 +1,6 @@ package cn.hutool.db.ds.simple; -import cn.hutool.core.clone.CloneRuntimeException; +import cn.hutool.core.exceptions.CloneRuntimeException; import javax.sql.DataSource; import java.io.Closeable; diff --git a/hutool-db/src/main/java/cn/hutool/db/sql/Condition.java b/hutool-db/src/main/java/cn/hutool/db/sql/Condition.java index 75a76e94d..2243ee2bd 100644 --- a/hutool-db/src/main/java/cn/hutool/db/sql/Condition.java +++ b/hutool-db/src/main/java/cn/hutool/db/sql/Condition.java @@ -1,13 +1,14 @@ package cn.hutool.db.sql; -import cn.hutool.core.clone.CloneSupport; import cn.hutool.core.convert.Convert; +import cn.hutool.core.exceptions.CloneRuntimeException; +import cn.hutool.core.math.NumberUtil; +import cn.hutool.core.text.StrUtil; import cn.hutool.core.text.split.SplitUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.CharUtil; -import cn.hutool.core.math.NumberUtil; -import cn.hutool.core.text.StrUtil; +import java.io.Serializable; import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -17,7 +18,8 @@ import java.util.List; * * @author Looly */ -public class Condition extends CloneSupport { +public class Condition implements Cloneable, Serializable { + private static final long serialVersionUID = 1L; /** * SQL中 LIKE 语句查询方式
@@ -362,6 +364,15 @@ public class Condition extends CloneSupport { return conditionStrBuilder.toString(); } + @Override + public Condition clone() { + try { + return (Condition) super.clone(); + } catch (final CloneNotSupportedException e) { + throw new CloneRuntimeException(e); + } + } + // ----------------------------------------------------------------------------------------------- Private method start /** diff --git a/hutool-extra/pom.xml b/hutool-extra/pom.xml index 58976323c..ccca6aa11 100755 --- a/hutool-extra/pom.xml +++ b/hutool-extra/pom.xml @@ -372,7 +372,7 @@ jakarta.validation jakarta.validation-api - 3.0.1 + 3.0.2 compile true @@ -464,7 +464,7 @@ org.springframework spring-expression - 5.3.19 + 5.3.20 compile true @@ -490,5 +490,23 @@ 6.1.6 provided + + com.sun.xml.bind + jaxb-impl + 2.3.6 + provided + + + javax.activation + activation + 1.1.1 + provided + + + org.openjdk.nashorn + nashorn-core + 15.4 + test + diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ScriptUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/script/ScriptUtil.java old mode 100755 new mode 100644 similarity index 99% rename from hutool-core/src/main/java/cn/hutool/core/util/ScriptUtil.java rename to hutool-extra/src/main/java/cn/hutool/extra/script/ScriptUtil.java index 3b567aa65..5d1000c7e --- a/hutool-core/src/main/java/cn/hutool/core/util/ScriptUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/script/ScriptUtil.java @@ -1,4 +1,4 @@ -package cn.hutool.core.util; +package cn.hutool.extra.script; import cn.hutool.core.exceptions.UtilException; import cn.hutool.core.map.WeakConcurrentMap; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/script/package-info.java b/hutool-extra/src/main/java/cn/hutool/extra/script/package-info.java new file mode 100644 index 000000000..a80e9e9f5 --- /dev/null +++ b/hutool-extra/src/main/java/cn/hutool/extra/script/package-info.java @@ -0,0 +1,6 @@ +/** + * 使用Java对脚本引擎的工具封装 + * + * @author looly + */ +package cn.hutool.extra.script; diff --git a/hutool-core/src/main/java/cn/hutool/core/util/JAXBUtil.java b/hutool-extra/src/main/java/cn/hutool/extra/xml/JAXBUtil.java similarity index 97% rename from hutool-core/src/main/java/cn/hutool/core/util/JAXBUtil.java rename to hutool-extra/src/main/java/cn/hutool/extra/xml/JAXBUtil.java index db82afada..ec13c635c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/JAXBUtil.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/xml/JAXBUtil.java @@ -1,9 +1,11 @@ -package cn.hutool.core.util; +package cn.hutool.extra.xml; import cn.hutool.core.exceptions.UtilException; import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.StrUtil; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.XmlUtil; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; diff --git a/hutool-extra/src/main/java/cn/hutool/extra/xml/package-info.java b/hutool-extra/src/main/java/cn/hutool/extra/xml/package-info.java new file mode 100644 index 000000000..be18488c9 --- /dev/null +++ b/hutool-extra/src/main/java/cn/hutool/extra/xml/package-info.java @@ -0,0 +1,8 @@ +/** + * XML和JAXB(Java Architecture for XML Binding)相关封装
+ * 由于JDK11+移除了"javax.xml.bind"相关类型,因此封装于extra模块 + * + * @author looly + * + */ +package cn.hutool.extra.xml; diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ScriptUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/script/ScriptUtilTest.java old mode 100755 new mode 100644 similarity index 96% rename from hutool-core/src/test/java/cn/hutool/core/util/ScriptUtilTest.java rename to hutool-extra/src/test/java/cn/hutool/extra/script/ScriptUtilTest.java index 34a57bf21..b5d37de20 --- a/hutool-core/src/test/java/cn/hutool/core/util/ScriptUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/script/ScriptUtilTest.java @@ -1,4 +1,4 @@ -package cn.hutool.core.util; +package cn.hutool.extra.script; import cn.hutool.core.exceptions.UtilException; import cn.hutool.core.io.resource.ResourceUtil; diff --git a/hutool-core/src/test/java/cn/hutool/core/util/JAXBUtilTest.java b/hutool-extra/src/test/java/cn/hutool/extra/xml/JAXBUtilTest.java similarity index 99% rename from hutool-core/src/test/java/cn/hutool/core/util/JAXBUtilTest.java rename to hutool-extra/src/test/java/cn/hutool/extra/xml/JAXBUtilTest.java index fb85d31c2..f53c93b7e 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/JAXBUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/extra/xml/JAXBUtilTest.java @@ -1,4 +1,4 @@ -package cn.hutool.core.util; +package cn.hutool.extra.xml; import org.junit.Assert; import org.junit.Test; diff --git a/hutool-core/src/test/resources/filter1.js b/hutool-extra/src/test/resources/filter1.js old mode 100755 new mode 100644 similarity index 100% rename from hutool-core/src/test/resources/filter1.js rename to hutool-extra/src/test/resources/filter1.js diff --git a/hutool-json/src/main/java/cn/hutool/json/JSON.java b/hutool-json/src/main/java/cn/hutool/json/JSON.java index 9a0345ede..ca28fb17c 100755 --- a/hutool-json/src/main/java/cn/hutool/json/JSON.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSON.java @@ -1,7 +1,6 @@ package cn.hutool.json; import cn.hutool.core.bean.BeanPath; -import cn.hutool.core.reflect.TypeReference; import java.io.Serializable; import java.io.StringWriter; @@ -171,16 +170,4 @@ public interface JSON extends Cloneable, Serializable { default T toBean(final Type type) { return JSONConverter.jsonConvert(type, this, getConfig()); } - - /** - * 转为实体类对象,转换异常将被抛出 - * - * @param Bean类型 - * @param reference {@link TypeReference}类型参考子类,可以获取其泛型参数中的Type类型 - * @return 实体类对象 - * @since 4.2.2 - */ - default T toBean(final TypeReference reference) { - return toBean(reference.getType()); - } } diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java b/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java index 06fb24fcf..7b43ff6d2 100755 --- a/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java @@ -333,6 +333,10 @@ public class JSONUtil { if (obj instanceof CharSequence) { return StrUtil.str((CharSequence) obj); } + + if(obj instanceof Number){ + return obj.toString(); + } return toJsonStr(parse(obj, jsonConfig)); } diff --git a/hutool-json/src/test/java/cn/hutool/json/JSONUtilTest.java b/hutool-json/src/test/java/cn/hutool/json/JSONUtilTest.java index d187c267d..1c985bf77 100644 --- a/hutool-json/src/test/java/cn/hutool/json/JSONUtilTest.java +++ b/hutool-json/src/test/java/cn/hutool/json/JSONUtilTest.java @@ -233,4 +233,18 @@ public class JSONUtilTest { final String xmlStr = JSONUtil.toXmlStr(obj); Assert.assertEquals("v1abc", xmlStr); } + + @Test + public void toJsonStrOfStringTest(){ + String a = "a"; + final String s = JSONUtil.toJsonStr(a); + Assert.assertEquals(a, s); + } + + @Test + public void toJsonStrOfNumberTest(){ + int a = 1; + final String s = JSONUtil.toJsonStr(a); + Assert.assertEquals("1", s); + } }