Java - 将 UUID 字段作为 this.uuid = original.getUUID() 进行 deepCopy 是否安全?

Sal*_*Egg 4 java uuid deep-copy

对于以下课程,当我进行深复制时,将代码编写为

this.id = original.getId();
Run Code Online (Sandbox Code Playgroud)

在我的测试中,似乎没问题,因为当我想更新 UUID 字段时,我总是为它分配一个新的 UUID 实例(我找不到任何可以修改现有 UUID 实例的函数)。在这种情况下,这个复制的实例永远不会对原始实例产生副作用。

public class Container {

    private Type type;
    private UUID id;
    private Container c;

    // public constructors here

    protected Container(Container original, boolean deepCopy) {
        this.type = original.getType();
        this.id = original.getId();
        // for deep copy of id field, should I write as:
        // this.id = new UUID(original.getId().getMostSignificantBits(), original.getId().getLeastSignificantBits());
        if (original.getC() != null) {
            this.c = deepCopy ? original.getC().deepCopy() : original.getC();
        }
    }

    // getter and setter here

    public Container deepCopy() {
        return new Container(this, true);
    }

}
Run Code Online (Sandbox Code Playgroud)

但是在我现在维护的项目中(不是我创建的),我发现深拷贝代码是这样的:

this.id = new UUID(original.getId().getMostSignificantBits(), original.getId().getLeastSignificantBits());
Run Code Online (Sandbox Code Playgroud)

毫无疑问,这是一个正确的解决方案。

我的问题是:这样做是否安全

this.id = original.getId();
Run Code Online (Sandbox Code Playgroud)

也许这是一个愚蠢的问题,感谢您抽出时间帮助我。

Gre*_*eek 5

是的,它很安全。UUID 是不可变的。

正如您所观察到的,您永远不会修改实例,您只需为您的成员分配一个新实例。因此,您永远不会影响任何其他代码的 UUID,即使它们最初引用了与您拥有的相同的 UUID。

“复制”代码是完全没有必要的。