diff --git a/CHANGELOG.md b/CHANGELOG.md index 7397e3183..4d571f437 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ * 【crypto 】 修复ZipUtil压缩成流的方法检查文件时报错问题(issue#3697@Github) * 【core 】 修复CopyOptions.setFieldValueEditor后生成null值setIgnoreNullValue无效问题(issue#3702@Github) * 【json 】 修复JSONConfig.setDateFormat设置后setWriteLongAsString失效问题(issue#IALQ0N@Gitee) +* 【core 】 修复Tree.cloneTree的Parent节点引用错误问题(issue#IANJTC@Gitee) ------------------------------------------------------------------------------------------------------------- # 5.8.31(2024-08-12) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/tree/Tree.java b/hutool-core/src/main/java/cn/hutool/core/lang/tree/Tree.java index 34775f92d..00410a64d 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/tree/Tree.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/tree/Tree.java @@ -315,22 +315,25 @@ public class Tree extends LinkedHashMap implements Node { */ public Tree cloneTree() { final Tree result = ObjectUtil.clone(this); - result.setChildren(cloneChildren()); + result.setChildren(cloneChildren(result)); return result; } /** * 递归复制子节点 * + * @param parent 新的父节点 * @return 新的子节点列表 */ - private List> cloneChildren() { + private List> cloneChildren(final Tree parent) { final List> children = getChildren(); if (null == children) { return null; } final List> newChildren = new ArrayList<>(children.size()); - children.forEach((t) -> newChildren.add(t.cloneTree())); + children.forEach((t) -> { + newChildren.add(t.cloneTree().setParent(parent)); + }); return newChildren; }