From c4d801e9b393b31d5ab51650787f48a51181a891 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 20 May 2023 02:30:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DBeanUtil.copyToList=E5=A4=8D?= =?UTF-8?q?=E5=88=B6Long=E7=AD=89=E7=B1=BB=E5=9E=8B=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/hutool/core/bean/BeanUtil.java | 7 +++++ .../dromara/hutool/core/bean/PropDesc.java | 9 ++++++ .../hutool/core/bean/copier/BeanCopier.java | 3 +- .../hutool/core/bean/Issue3091Test.java | 29 +++++++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 hutool-core/src/test/java/org/dromara/hutool/core/bean/Issue3091Test.java diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanUtil.java index 5afd6d969..b74f0c3a2 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/bean/BeanUtil.java @@ -737,7 +737,14 @@ public class BeanUtil { if (collection.isEmpty()) { return new ArrayList<>(0); } + + // issue#3091 + if(ClassUtil.isBasicType(targetType) || String.class == targetType){ + return Convert.toList(targetType, collection); + } + return collection.stream().map((source) -> { + final T target = ConstructorUtil.newInstanceIfPossible(targetType); copyProperties(source, target, copyOptions); return target; diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/bean/PropDesc.java b/hutool-core/src/main/java/org/dromara/hutool/core/bean/PropDesc.java index c429b7467..8d5d3aaae 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/bean/PropDesc.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/bean/PropDesc.java @@ -300,6 +300,15 @@ public class PropDesc { return this; } + @Override + public String toString() { + return "PropDesc{" + + "field=" + field + + ", getter=" + getter + + ", setter=" + setter + + '}'; + } + //------------------------------------------------------------------------------------ Private method start /** diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/bean/copier/BeanCopier.java b/hutool-core/src/main/java/org/dromara/hutool/core/bean/copier/BeanCopier.java index 14645b08a..f06c120bc 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/bean/copier/BeanCopier.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/bean/copier/BeanCopier.java @@ -77,6 +77,7 @@ public class BeanCopier implements Copier, Serializable { public BeanCopier(final Object source, final T target, final Type targetType, final CopyOptions copyOptions) { Assert.notNull(source, "Source bean must be not null!"); Assert.notNull(target, "Target bean must be not null!"); + final Copier copier; if (source instanceof Map) { if (target instanceof Map) { @@ -85,11 +86,9 @@ public class BeanCopier implements Copier, Serializable { copier = new MapToBeanCopier<>((Map) source, target, targetType, copyOptions); } } else if (source instanceof ValueProvider) { - //noinspection unchecked copier = new ValueProviderToBeanCopier<>((ValueProvider) source, target, targetType, copyOptions); } else { if (target instanceof Map) { - //noinspection unchecked copier = (Copier) new BeanToMapCopier(source, (Map) target, targetType, copyOptions); } else { copier = new BeanToBeanCopier<>(source, target, targetType, copyOptions); diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/bean/Issue3091Test.java b/hutool-core/src/test/java/org/dromara/hutool/core/bean/Issue3091Test.java new file mode 100644 index 000000000..a1e26b110 --- /dev/null +++ b/hutool-core/src/test/java/org/dromara/hutool/core/bean/Issue3091Test.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.bean; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +public class Issue3091Test { + + @Test + void copyToListTest() { + final List list = Arrays.asList(1L,2L); + final List result = BeanUtil.copyToList(list, Integer.class); + Assertions.assertEquals("[1, 2]", result.toString()); + } +}