gpt4 book ai didi

Java 在自定义克隆期间检测循环引用

转载 作者:搜寻专家 更新时间:2023-10-31 19:41:41 24 4
gpt4 key购买 nike

我正在为每个实体编写自定义克隆方法。对于深层复制,有没有一种方法可以检测循环引用,或者我是否必须手动弄清楚并将克隆限制为单向而不是双向。

例如,我们使用 hibernate,因此 User 对象引用了 Address,Address 引用了 User。尝试查看是否可以在不遇到循环引用问题的情况下对 Address 和 User 进行深度复制

最佳答案

要实现这一点,您需要一个对已克隆对象的引用映射。我们实现了这样的深度克隆:

在我们的实体基类中:

public void deepClone() {
Map<EntityBase,EntityBase> alreadyCloned =
new IdentityHashMap<EntityBase,EntityBase>();
return deepClone(this,alreadyCloned);
}

private static EntityBase deepClone(EntityBase entity,
Map<EntityBase,EntityBase> alreadyCloned) {
EntityBase clone = alreadyCloned.get(entity);
if( clone != null ) {
return alreadyClonedEntity;
}
clone = newInstance(entity.getClass);
alreadyCloned.put(this,clone);
// fill clone's attributes from original entity. Call
// deepClone(entity,alreadyCloned)
// recursively for each entity valued object.
...
}

关于Java 在自定义克隆期间检测循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com