From 2cfb33af9eeac7869e180c496ac1c427f77fa903 Mon Sep 17 00:00:00 2001
From: jiazhengquan <2466896229@qq.com>
Date: Tue, 8 Mar 2022 18:01:07 +0800
Subject: [PATCH 1/6] =?UTF-8?q?=E9=92=88=E5=AF=B9issue#I4WUWR=E5=88=9D?=
=?UTF-8?q?=E7=89=88=E4=BF=AE=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/hutool/core/util/ReflectUtil.java | 33 ++++++++++++++-----
1 file changed, 25 insertions(+), 8 deletions(-)
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java
index de406bfbf..4f9ded9d2 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java
@@ -663,18 +663,35 @@ public class ReflectUtil {
Assert.notNull(beanClass);
Method[] allMethods = null;
+ Class>[] searchInterfaces = null, parentInterfaces = null;
Class> searchType = beanClass;
Method[] declaredMethods;
- while (searchType != null) {
- declaredMethods = searchType.getDeclaredMethods();
- if (null == allMethods) {
- allMethods = declaredMethods;
- } else {
- allMethods = ArrayUtil.append(allMethods, declaredMethods);
+ while (searchType != null || searchInterfaces != null) {
+ if (searchType != null) {
+ declaredMethods = searchType.getDeclaredMethods();
+ if (null == allMethods) {
+ allMethods = declaredMethods;
+ } else {
+ allMethods = ArrayUtil.append(allMethods, declaredMethods);
+ }
+ Class>[] interfaces = searchType.getInterfaces();
+ for (Class> element : interfaces) {
+ allMethods = ArrayUtil.append(allMethods, element.getDeclaredMethods());
+ parentInterfaces = ArrayUtil.addAll(element.getInterfaces());
+ }
+ searchInterfaces = parentInterfaces;
+ Class>[] classes = searchInterfaces.length == 0 ? null : searchInterfaces;
+ searchInterfaces = withSuperClassMethods ? classes : null;
+ searchType = withSuperClassMethods ? searchType.getSuperclass() : null;
+ }
+ if (searchInterfaces != null) {
+ for (Class> searchInterface : searchInterfaces) {
+ allMethods = ArrayUtil.append(allMethods, searchInterface.getDeclaredMethods());
+ parentInterfaces = ArrayUtil.addAll(searchInterface.getInterfaces());
+ }
+ searchInterfaces = parentInterfaces.length == 0 ? null : parentInterfaces;
}
- searchType = withSuperClassMethods ? searchType.getSuperclass() : null;
}
-
return allMethods;
}
From 1aeb56564f38826d575e63e4e52298b9784c484e Mon Sep 17 00:00:00 2001
From: jiazhengquan <2466896229@qq.com>
Date: Wed, 9 Mar 2022 11:25:52 +0800
Subject: [PATCH 2/6] =?UTF-8?q?=E9=92=88=E5=AF=B9issue#I4WUWR=E4=BF=AE?=
=?UTF-8?q?=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/hutool/core/util/ReflectUtil.java | 36 +++++++++----------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java
index 4f9ded9d2..dbad1e91d 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/ReflectUtil.java
@@ -663,34 +663,34 @@ public class ReflectUtil {
Assert.notNull(beanClass);
Method[] allMethods = null;
- Class>[] searchInterfaces = null, parentInterfaces = null;
Class> searchType = beanClass;
+ Class>[] tempInterfaceType, interfaceType;
Method[] declaredMethods;
- while (searchType != null || searchInterfaces != null) {
- if (searchType != null) {
+ if (searchType.isInterface()) {
+ allMethods = searchType.getDeclaredMethods();
+ interfaceType = searchType.getInterfaces();
+ while (ArrayUtil.isNotEmpty(interfaceType)) {
+ tempInterfaceType = interfaceType;
+ for (int i = 0; i < tempInterfaceType.length; i++) {
+ Class> temp = tempInterfaceType[i];
+ allMethods = ArrayUtil.append(allMethods, temp.getDeclaredMethods());
+ if (i == 0 || ArrayUtil.isEmpty(interfaceType)) {
+ interfaceType = temp.getInterfaces();
+ } else {
+ interfaceType = ArrayUtil.append(interfaceType, temp.getInterfaces());
+ }
+ }
+ }
+ } else {
+ while (searchType != null) {
declaredMethods = searchType.getDeclaredMethods();
if (null == allMethods) {
allMethods = declaredMethods;
} else {
allMethods = ArrayUtil.append(allMethods, declaredMethods);
}
- Class>[] interfaces = searchType.getInterfaces();
- for (Class> element : interfaces) {
- allMethods = ArrayUtil.append(allMethods, element.getDeclaredMethods());
- parentInterfaces = ArrayUtil.addAll(element.getInterfaces());
- }
- searchInterfaces = parentInterfaces;
- Class>[] classes = searchInterfaces.length == 0 ? null : searchInterfaces;
- searchInterfaces = withSuperClassMethods ? classes : null;
searchType = withSuperClassMethods ? searchType.getSuperclass() : null;
}
- if (searchInterfaces != null) {
- for (Class> searchInterface : searchInterfaces) {
- allMethods = ArrayUtil.append(allMethods, searchInterface.getDeclaredMethods());
- parentInterfaces = ArrayUtil.addAll(searchInterface.getInterfaces());
- }
- searchInterfaces = parentInterfaces.length == 0 ? null : parentInterfaces;
- }
}
return allMethods;
}
From 04ae795ce651589223a85e89246bc9bd08c82504 Mon Sep 17 00:00:00 2001
From: jiazhengquan <2466896229@qq.com>
Date: Fri, 11 Mar 2022 09:50:37 +0800
Subject: [PATCH 3/6] =?UTF-8?q?=E9=92=88=E5=AF=B9issue#I4X9TT=E4=BF=AE?=
=?UTF-8?q?=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
hutool-core/src/main/java/cn/hutool/core/text/NamingCase.java | 2 +-
hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/hutool-core/src/main/java/cn/hutool/core/text/NamingCase.java b/hutool-core/src/main/java/cn/hutool/core/text/NamingCase.java
index a35d78f1e..a5c7a5d52 100644
--- a/hutool-core/src/main/java/cn/hutool/core/text/NamingCase.java
+++ b/hutool-core/src/main/java/cn/hutool/core/text/NamingCase.java
@@ -97,7 +97,7 @@ public class NamingCase {
// 后一个为大写,按照专有名词对待,如aBC -> a_BC
} else {
//前一个为大写
- if (null == nextChar || Character.isLowerCase(nextChar)) {
+ if (null != nextChar && Character.isLowerCase(nextChar)) {
// 普通首字母大写,如ABcc -> A_bcc
sb.append(symbol);
c = Character.toLowerCase(c);
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java
index ee1e1da50..2dcef2850 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java
@@ -422,6 +422,7 @@ public class StrUtilTest {
.set("H2", "H2")
.set("H#case", "H#case")
.set("PNLabel", "PN_label")
+ .set("DEPT_NAME","DEPT_NAME")
.forEach((key, value) -> Assert.assertEquals(value, StrUtil.toUnderlineCase(key)));
}
From 78f886075eb45b1fdeca88cc0ace0f9aefcc4ff5 Mon Sep 17 00:00:00 2001
From: jiazhengquan <2466896229@qq.com>
Date: Fri, 11 Mar 2022 17:51:09 +0800
Subject: [PATCH 4/6] =?UTF-8?q?issue=20#I4XG4L=20=E5=88=9D=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/hutool/core/util/ArrayUtil.java | 37 +++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
index 8c948e8a9..01e4ea721 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
@@ -368,6 +368,43 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
}
+ /**
+ * 将元素值设置为数组的某个位置,根据元素顺序添加
+ * 当给定的index大于数组长度,则追加
+ *
+ * @param 数组元素类型
+ * @param buffer 已有数组
+ * @param index 位置,大于长度追加,否则替换
+ * @param values 新值
+ * @return 新数组或原有数组
+ */
+ public static T[] replace(T[] buffer, int index, T... values) {
+ return index == 0 ? values : replaceBy(buffer, index, values);
+ }
+
+ /**
+ * 将元素值设置为数组的某个位置,根据元素顺序添加
+ * 当给定的index大于数组长度,则追加
+ *
+ * @param 数组元素类型
+ * @param buffer 已有数组
+ * @param index 位置,大于长度追加,否则替换
+ * @param values 新值
+ * @return 新数组或原有数组
+ */
+ public static T[] replaceBy(T[] buffer, int index, T... values) {
+ if (index < buffer.length && buffer.length - index - 1 >= values.length) {
+ for (int i = index; i < values.length; i++) {
+ Array.set(buffer, index, values[i]);
+ }
+ return buffer;
+ } else {
+ final T[] result = (T[]) Array.newInstance(buffer.getClass().getComponentType(), buffer.length - index - 1);
+ System.arraycopy(buffer, 0, result, 0, buffer.length - index - 1);
+ return append(result, values);
+ }
+ }
+
/**
* 将新元素插入到到已有数组中的某个位置
* 添加新元素会生成一个新的数组,不影响原数组
From c62d4d382acb0b25555e5f1d9a980b787edb2adf Mon Sep 17 00:00:00 2001
From: Husky <2466896229@qq.com>
Date: Sun, 13 Mar 2022 23:07:41 +0800
Subject: [PATCH 5/6] =?UTF-8?q?https://gitee.com/dromara/hutool/issues/I4X?=
=?UTF-8?q?G4L=E5=88=9D=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/hutool/core/util/ArrayUtil.java | 57 ++++++++-------
.../cn/hutool/core/util/ArrayUtilTest.java | 72 ++++++++++++++++---
2 files changed, 93 insertions(+), 36 deletions(-)
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
index 01e4ea721..0c67d6522 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
@@ -369,8 +369,9 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
/**
- * 将元素值设置为数组的某个位置,根据元素顺序添加
- * 当给定的index大于数组长度,则追加
+ * 将新元素插入到到已有数组中的某个位置
+ * 添加新元素会生成一个新数组或原有数组
+ * 如果插入位置为为负数,那么生成一个由插入元素顺序加已有数组顺序的新数组
*
* @param 数组元素类型
* @param buffer 已有数组
@@ -378,31 +379,33 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* @param values 新值
* @return 新数组或原有数组
*/
+ @SuppressWarnings({"unchecked", "SuspiciousSystemArraycopy"})
public static T[] replace(T[] buffer, int index, T... values) {
- return index == 0 ? values : replaceBy(buffer, index, values);
- }
-
- /**
- * 将元素值设置为数组的某个位置,根据元素顺序添加
- * 当给定的index大于数组长度,则追加
- *
- * @param 数组元素类型
- * @param buffer 已有数组
- * @param index 位置,大于长度追加,否则替换
- * @param values 新值
- * @return 新数组或原有数组
- */
- public static T[] replaceBy(T[] buffer, int index, T... values) {
- if (index < buffer.length && buffer.length - index - 1 >= values.length) {
- for (int i = index; i < values.length; i++) {
- Array.set(buffer, index, values[i]);
+ if (index < 0) {
+ return insert(buffer, 0, values);
+ }
+ if (isEmpty(buffer) || index == 0 && isNotEmpty(values)) {
+ return values;
+ }
+ if (index >= buffer.length || isEmpty(values)) {
+ return append(buffer, values);
+ }
+ int replaceSpace = buffer.length - index - 1;
+ if (replaceSpace > values.length) {
+ for (int i = index - 1; i < values.length; i++) {
+ Array.set(buffer, i + 1, values[i]);
}
return buffer;
- } else {
- final T[] result = (T[]) Array.newInstance(buffer.getClass().getComponentType(), buffer.length - index - 1);
- System.arraycopy(buffer, 0, result, 0, buffer.length - index - 1);
- return append(result, values);
}
+ int newArrayLength = index + values.length;
+ final T[] result = (T[]) Array.newInstance(buffer.getClass().getComponentType(), newArrayLength);
+ System.arraycopy(buffer, 0, result, 0, index);
+ int valueIndex = 0;
+ for (int i = index; i < newArrayLength; i++) {
+ Array.set(result, i, values[valueIndex]);
+ valueIndex = valueIndex + 1;
+ }
+ return result;
}
/**
@@ -1577,7 +1580,7 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* @since 4.5.18
*/
public static boolean isAllEmpty(Object... args) {
- for (Object obj: args) {
+ for (Object obj : args) {
if (false == ObjectUtil.isEmpty(obj)) {
return false;
}
@@ -1795,10 +1798,10 @@ public class ArrayUtil extends PrimitiveArrayUtil {
/**
* 查找最后一个子数组的开始位置
*
- * @param array 数组
+ * @param array 数组
* @param endInclude 查找结束的位置(包含)
- * @param subArray 子数组
- * @param 数组元素类型
+ * @param subArray 子数组
+ * @param 数组元素类型
* @return 最后一个子数组的开始位置,即子数字第一个元素在数组中的位置
* @since 5.4.8
*/
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java
index 3ba18becf..e2ce30b9e 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java
@@ -363,7 +363,7 @@ public class ArrayUtilTest {
}
@Test
- public void indexOfSubTest2(){
+ public void indexOfSubTest2() {
Integer[] a = {0x12, 0x56, 0x34, 0x56, 0x78, 0x9A};
Integer[] b = {0x56, 0x78};
int i = ArrayUtil.indexOfSub(a, b);
@@ -401,7 +401,7 @@ public class ArrayUtilTest {
}
@Test
- public void lastIndexOfSubTest2(){
+ public void lastIndexOfSubTest2() {
Integer[] a = {0x12, 0x56, 0x78, 0x56, 0x21, 0x9A};
Integer[] b = {0x56, 0x78};
int i = ArrayUtil.indexOfSub(a, b);
@@ -409,17 +409,17 @@ public class ArrayUtilTest {
}
@Test
- public void reverseTest(){
- int[] a = {1,2,3,4};
+ public void reverseTest() {
+ int[] a = {1, 2, 3, 4};
final int[] reverse = ArrayUtil.reverse(a);
- Assert.assertArrayEquals(new int[]{4,3,2,1}, reverse);
+ Assert.assertArrayEquals(new int[]{4, 3, 2, 1}, reverse);
}
@Test
- public void reverseTest2s(){
- Object[] a = {"1",'2',"3",4};
+ public void reverseTest2s() {
+ Object[] a = {"1", '2', "3", 4};
final Object[] reverse = ArrayUtil.reverse(a);
- Assert.assertArrayEquals(new Object[]{4,"3",'2',"1"}, reverse);
+ Assert.assertArrayEquals(new Object[]{4, "3", '2', "1"}, reverse);
}
@Test
@@ -461,9 +461,63 @@ public class ArrayUtilTest {
}
@Test
- public void getTest(){
+ public void getTest() {
String[] a = {"a", "b", "c"};
final Object o = ArrayUtil.get(a, -1);
Assert.assertEquals("c", o);
}
+
+ @Test
+ public void replaceTest() {
+ String[] a = {"1", "2", "3", "4"};
+ String[] b = {"a", "b", "c"};
+
+ // 在小于0的位置,-1位置插入,返回b+a
+ String[] result = ArrayUtil.replace(a, -1, b);
+ Assert.assertArrayEquals(new String[]{"a", "b", "c", "1", "2", "3", "4"}, result);
+
+ // 在第0个位置插入,即覆盖a,直接返回b
+ result = ArrayUtil.replace(a, 0, b);
+ Assert.assertArrayEquals(new String[]{"a", "b", "c"}, result);
+
+ // 在第1个位置插入,即"2"之前
+ result = ArrayUtil.replace(a, 1, b);
+ Assert.assertArrayEquals(new String[]{"1", "a", "b", "c"}, result);
+
+ //上一步测试修改了原数组结构
+ String[] c = {"1", "2", "3", "4"};
+ String[] d = {"a", "b", "c"};
+
+ // 在第2个位置插入,即"3"之后
+ result = ArrayUtil.replace(c, 2, d);
+ Assert.assertArrayEquals(new String[]{"1", "2", "a", "b", "c"}, result);
+
+ // 在第3个位置插入,即"4"之后
+ result = ArrayUtil.replace(c, 3, d);
+ Assert.assertArrayEquals(new String[]{"1", "2", "3", "a", "b", "c"}, result);
+
+ // 在第4个位置插入,数组长度为4,在索引4出替换即两个数组相加
+ result = ArrayUtil.replace(c, 4, d);
+ Assert.assertArrayEquals(new String[]{"1", "2", "3", "4", "a", "b", "c"}, result);
+
+ // 在大于3个位置插入,数组长度为4,即两个数组相加
+ result = ArrayUtil.replace(c, 5, d);
+ Assert.assertArrayEquals(new String[]{"1", "2", "3", "4", "a", "b", "c"}, result);
+
+ //上一步测试修改了原数组结构
+ String[] e = null;
+ String[] f = {"a", "b", "c"};
+
+ // e为null 返回 f
+ result = ArrayUtil.replace(e, -1, f);
+ Assert.assertArrayEquals(new String[]{"a", "b", "c"}, result);
+
+ //上一步测试修改了原数组结构
+ String[] g = {"a", "b", "c"};
+ String[] h = null;
+
+ // h为null 返回 g
+ result = ArrayUtil.replace(g, 0, h);
+ Assert.assertArrayEquals(new String[]{"a", "b", "c"}, result);
+ }
}
From 7acac417e694287870ea6eda36339c0e4fa3f094 Mon Sep 17 00:00:00 2001
From: Husky <2466896229@qq.com>
Date: Sun, 13 Mar 2022 23:08:40 +0800
Subject: [PATCH 6/6] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?=
=?UTF-8?q?=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/test/java/cn/hutool/core/util/ArrayUtilTest.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java
index e2ce30b9e..442ce4b91 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java
@@ -504,7 +504,6 @@ public class ArrayUtilTest {
result = ArrayUtil.replace(c, 5, d);
Assert.assertArrayEquals(new String[]{"1", "2", "3", "4", "a", "b", "c"}, result);
- //上一步测试修改了原数组结构
String[] e = null;
String[] f = {"a", "b", "c"};
@@ -512,7 +511,6 @@ public class ArrayUtilTest {
result = ArrayUtil.replace(e, -1, f);
Assert.assertArrayEquals(new String[]{"a", "b", "c"}, result);
- //上一步测试修改了原数组结构
String[] g = {"a", "b", "c"};
String[] h = null;