From 1c6bdf67e05fda310fc948c2a7e477deadf1646f Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 6 Jun 2022 01:27:16 +0800 Subject: [PATCH] fix bug --- CHANGELOG.md | 1 + .../src/main/java/cn/hutool/core/util/ArrayUtil.java | 7 +++++++ .../src/test/java/cn/hutool/core/util/ArrayUtilTest.java | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e4e67f09..49a273fc9 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * 【core 】 修复NumberUtil.isXXX空判断错误(issue#2356@Github) * 【core 】 修复Convert.toSBC空指针问题(issue#I5APKK@Gitee) * 【json 】 修复Bean中存在bytes,无法转换问题(issue#2365@Github) +* 【core 】 ArrayUtil.setOrAppend()传入空数组时,抛出异常(issue#I5APJE@Gitee) ------------------------------------------------------------------------------------------------------------- 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 9e535b668..b8c273e80 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java @@ -347,6 +347,13 @@ public class ArrayUtil extends PrimitiveArrayUtil { Array.set(buffer, index, value); return buffer; } else { + if(ArrayUtil.isEmpty(buffer)){ + // issue#I5APJE + // 可变长类型在buffer为空的情况下,类型会被擦除,导致报错,此处修正 + final T[] values = newArray(value.getClass(), 1); + values[0] = value; + return append(buffer, values); + } return append(buffer, value); } } 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 de3f0d911..f0dc8a029 100755 --- a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java @@ -527,4 +527,11 @@ public class ArrayUtilTest { result = ArrayUtil.replace(g, 0, h); Assert.assertArrayEquals(g, result); } + + @Test + public void setOrAppendTest(){ + String[] arr = new String[0]; + String[] newArr = ArrayUtil.setOrAppend(arr, 0, "Good");// ClassCastException + Assert.assertArrayEquals(new String[]{"Good"}, newArr); + } }