diff --git a/CHANGELOG.md b/CHANGELOG.md
index ea3760ef3..7a88eb737 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,8 +9,11 @@
* 【setting】 Setting中增加addSetting和autoLoad重载(pr#104@Gitee)
* 【core 】 增加copyProperties,根据Class创建对象并进行属性拷贝(pr#105@Gitee)
* 【core 】 添加获取class当前文件夹名称方法(pr#106@Gitee)
+* 【core 】 BooleanUtil中重载歧义修正,修改了包装参数的方法名(issue#I1BSK8@Gitee)
+* 【core 】 XmlUtil增加xmlToBean和beanToXml方法
### Bug修复
+* 【core 】 修复TypeUtil无法获取泛型接口的泛型参数问题(issue#I1BRFI@Gitee)
-------------------------------------------------------------------------------------------------------------
## 5.2.3
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/BooleanUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/BooleanUtil.java
index ac6ed3340..6a0f84ad9 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/BooleanUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/BooleanUtil.java
@@ -23,7 +23,7 @@ public class BooleanUtil {
if (bool == null) {
return null;
}
- return bool.booleanValue() ? Boolean.FALSE : Boolean.TRUE;
+ return bool ? Boolean.FALSE : Boolean.TRUE;
}
/**
@@ -99,7 +99,7 @@ public class BooleanUtil {
* @return Integer值
*/
public static Integer toInteger(boolean value) {
- return Integer.valueOf(toInt(value));
+ return toInt(value);
}
/**
@@ -119,7 +119,7 @@ public class BooleanUtil {
* @return Character值
*/
public static Character toCharacter(boolean value) {
- return Character.valueOf(toChar(value));
+ return toChar(value);
}
/**
@@ -139,7 +139,7 @@ public class BooleanUtil {
* @return Byte值
*/
public static Byte toByteObj(boolean value) {
- return Byte.valueOf(toByte(value));
+ return toByte(value);
}
/**
@@ -149,7 +149,7 @@ public class BooleanUtil {
* @return long值
*/
public static long toLong(boolean value) {
- return (long) toInt(value);
+ return toInt(value);
}
/**
@@ -159,7 +159,7 @@ public class BooleanUtil {
* @return Long值
*/
public static Long toLongObj(boolean value) {
- return Long.valueOf(toLong(value));
+ return toLong(value);
}
/**
@@ -179,7 +179,7 @@ public class BooleanUtil {
* @return Short值
*/
public static Short toShortObj(boolean value) {
- return Short.valueOf(toShort(value));
+ return toShort(value);
}
/**
@@ -199,7 +199,7 @@ public class BooleanUtil {
* @return float值
*/
public static Float toFloatObj(boolean value) {
- return Float.valueOf(toFloat(value));
+ return toFloat(value);
}
/**
@@ -209,7 +209,7 @@ public class BooleanUtil {
* @return double值
*/
public static double toDouble(boolean value) {
- return (double) toInt(value);
+ return toInt(value);
}
/**
@@ -219,7 +219,7 @@ public class BooleanUtil {
* @return double值
*/
public static Double toDoubleObj(boolean value) {
- return Double.valueOf(toDouble(value));
+ return toDouble(value);
}
/**
@@ -325,12 +325,12 @@ public class BooleanUtil {
* @param array {@code Boolean}数组
* @return 取与为真返回{@code true}
*/
- public static Boolean and(final Boolean... array) {
+ public static Boolean andOfWrap(Boolean... array) {
if (ArrayUtil.isEmpty(array)) {
throw new IllegalArgumentException("The Array must not be empty !");
}
final boolean[] primitive = Convert.convert(boolean[].class, array);
- return Boolean.valueOf(and(primitive));
+ return and(primitive);
}
/**
@@ -376,12 +376,12 @@ public class BooleanUtil {
* @param array {@code Boolean}数组
* @return 取或为真返回{@code true}
*/
- public static Boolean or(Boolean... array) {
+ public static Boolean orOfWrap(Boolean... array) {
if (ArrayUtil.isEmpty(array)) {
throw new IllegalArgumentException("The Array must not be empty !");
}
final boolean[] primitive = Convert.convert(boolean[].class, array);
- return Boolean.valueOf(or(primitive));
+ return or(primitive);
}
/**
@@ -424,12 +424,12 @@ public class BooleanUtil {
* @param array {@code Boolean} 数组
* @return 异或为真取{@code true}
*/
- public static Boolean xor(Boolean... array) {
+ public static Boolean xorOfWrap(Boolean... array) {
if (ArrayUtil.isEmpty(array)) {
throw new IllegalArgumentException("The Array must not be empty !");
}
final boolean[] primitive = Convert.convert(boolean[].class, array);
- return Boolean.valueOf(xor(primitive));
+ return xor(primitive);
}
/**
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/TypeUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/TypeUtil.java
index 031c3238a..85cb22443 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/TypeUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/TypeUtil.java
@@ -1,5 +1,7 @@
package cn.hutool.core.util;
+import cn.hutool.core.map.TableMap;
+
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
@@ -8,8 +10,6 @@ import java.lang.reflect.TypeVariable;
import java.lang.reflect.WildcardType;
import java.util.Map;
-import cn.hutool.core.map.TableMap;
-
/**
* 针对 {@link Type} 的工具类封装
* 最主要功能包括:
@@ -253,12 +253,23 @@ public class TypeUtil {
* @since 4.5.2
*/
public static ParameterizedType toParameterizedType(Type type) {
+ ParameterizedType result = null;
if (type instanceof ParameterizedType) {
- return (ParameterizedType) type;
+ result = (ParameterizedType) type;
} else if (type instanceof Class) {
- return toParameterizedType(((Class>) type).getGenericSuperclass());
+ final Class> clazz = (Class>) type;
+ Type genericSuper = clazz.getGenericSuperclass();
+ if(null == genericSuper || Object.class.equals(genericSuper)){
+ // 如果类没有父类,而是实现一些定义好的泛型接口,则取接口的Type
+ final Type[] genericInterfaces = clazz.getGenericInterfaces();
+ if(ArrayUtil.isNotEmpty(genericInterfaces)){
+ // 默认取第一个实现接口的泛型Type
+ genericSuper = genericInterfaces[0];
+ }
+ }
+ result = toParameterizedType(genericSuper);
}
- return null;
+ return result;
}
/**
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java
index fdac8e5eb..35715b43e 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java
@@ -1,5 +1,6 @@
package cn.hutool.core.util;
+import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.io.FileUtil;
@@ -756,6 +757,19 @@ public class XmlUtil {
return xmlToMap(xmlStr, new HashMap<>());
}
+ /**
+ * XML转Java Bean
+ *
+ * @param bean类型
+ * @param node XML节点
+ * @param bean bean类
+ * @return bean
+ * @since 5.2.4
+ */
+ public static T xmlToBean(Node node, Class bean){
+ return BeanUtil.toBean(xmlToMap(node), bean);
+ }
+
/**
* XML格式字符串转换为Map
*
@@ -961,6 +975,21 @@ public class XmlUtil {
return doc;
}
+ /**
+ * 将Bean转换为XML
+ *
+ * @param bean Bean对象
+ * @param namespace 命名空间,可以为null
+ * @return XML
+ * @since 5.2.4
+ */
+ public static Document beanToXml(Object bean, String namespace) {
+ if(null == bean){
+ return null;
+ }
+ return mapToXml(BeanUtil.beanToMap(bean), bean.getClass().getSimpleName(), namespace);
+ }
+
/**
* 给定节点是否为{@link Element} 类型节点
*
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/BooleanUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/BooleanUtilTest.java
index f7bea2dc1..c83bd9493 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/BooleanUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/BooleanUtilTest.java
@@ -21,4 +21,22 @@ public class BooleanUtilTest {
Assert.assertFalse(BooleanUtil.toBoolean("6455434"));
Assert.assertFalse(BooleanUtil.toBoolean(""));
}
+
+ @Test
+ public void andTest(){
+ Assert.assertFalse(BooleanUtil.and(true,false));
+ Assert.assertFalse(BooleanUtil.andOfWrap(true,false));
+ }
+
+ @Test
+ public void orTest(){
+ Assert.assertTrue(BooleanUtil.or(true,false));
+ Assert.assertTrue(BooleanUtil.orOfWrap(true,false));
+ }
+
+ @Test
+ public void xorTest(){
+ Assert.assertTrue(BooleanUtil.xor(true,false));
+ Assert.assertTrue(BooleanUtil.xorOfWrap(true,false));
+ }
}
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/TypeUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/TypeUtilTest.java
index 6b7df700d..94ef42954 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/TypeUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/TypeUtilTest.java
@@ -1,13 +1,13 @@
package cn.hutool.core.util;
+import org.junit.Assert;
+import org.junit.Test;
+
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
-import org.junit.Assert;
-import org.junit.Test;
-
public class TypeUtilTest {
@Test
@@ -39,4 +39,21 @@ public class TypeUtilTest {
return 1;
}
}
+
+ @Test
+ public void getTypeArgumentTest(){
+ // 测试不继承父类,而是实现泛型接口时是否可以获取成功。
+ final Type typeArgument = TypeUtil.getTypeArgument(IPService.class);
+ Assert.assertEquals(String.class, typeArgument);
+ }
+
+ public interface OperateService {
+ void service(T t);
+ }
+
+ public static class IPService implements OperateService {
+ @Override
+ public void service(String string) {
+ }
+ }
}