深度克隆Object Java中的特定值

时间:2013-12-31 17:19:42

标签: java clone

在我的java项目中,我有两个类AtomSExpression,我需要能够克隆。这些都实现了Expression。我的Atom类只包含一个String,我相信它是不可变的,因此可以使用以下内容安全地克隆类,因为String无法修改。

@Override
public Object clone() throws CloneNotSupportedException {
    return super.clone();
}

然而,SExpression类更复杂,因为它有3个字段:SExpression parent,SExpression next和Expression data。这样expr.data.parent就是与expr相同的实例。

@Override
public Object clone() throws CloneNotSupportedException {
    SExpression clonedExpr = (SExpression) super.clone();
    if(clonedExpr.next != null)
        clonedExpr.next = (SExpression) clonedExpr.next.clone();
    if(clonedExpr.data != null)
        clonedExpr.data = (Expression) clonedExpr.data.clone();
    return clonedExpr;
}

但是,您可以想象父字段仍然引用旧父字段。有人有解决方案吗?我唯一能想到的是可能有一个类变量,当前父项的SExpression,每次克隆数据时都会将其设置为这个,这似乎是一个巨大的黑客攻击。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

似乎是您克隆整个链接列表而不是单个表达式。 在parent = null,next = null;

的位置执行此操作

答案 1 :(得分:0)

这个问题可以帮到你:

Deep clone utility recomendation

特别是克隆库在其中一个答案中推荐:

http://code.google.com/p/cloning/

我没有玩过图书馆,但看起来它可能会覆盖你。