Java-按照this.UUID=original.getUUID()对UUID字段进行深度复制是否安全?
对于下面的类,当我进行深度复制时,按如下方式编写代码是否安全Java-按照this.UUID=original.getUUID()对UUID字段进行深度复制是否安全?,java,uuid,deep-copy,Java,Uuid,Deep Copy,对于下面的类,当我进行深度复制时,按如下方式编写代码是否安全 this.id = original.getId(); 在我的测试中,它看起来还可以,因为当我想要更新UUID字段时,我总是给它分配一个新的UUID实例(我找不到任何可以修改现有UUID实例的函数)。在这种情况下,这个复制的实例将永远不会对原始实例产生副作用 public class Container { private Type type; private UUID id; private Contai
this.id = original.getId();
在我的测试中,它看起来还可以,因为当我想要更新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);
}
}
但是,在我现在维护的项目中(不是由我创建的),我发现深度复制代码如下所示:
this.id = new UUID(original.getId().getMostSignificantBits(), original.getId().getLeastSignificantBits());
毫无疑问,这是一个正确的解决方案
我的问题是:这样做安全吗
this.id = original.getId();
也许这是一个愚蠢的问题,谢谢你花时间来帮助我。深度复制意味着对象树中的每个对象都是一个新实例。通过执行
this.id = original.getId();
您正在使用与原始对象相同的UUID对象
找到的代码是如何复制UUID对象,使其具有相同的值。为安全起见,不需要复制UUID,因为UUID类是;从其:
表示不可变的通用唯一标识符(UUID)的类
但是,可能还有其他支持复制的注意事项。是的,这是安全的。UUID是不可变的 正如您所观察到的,您从不修改实例,只需将新实例分配给您的成员。因此,您永远不会影响任何其他代码的UUID,即使它们最初引用了与您相同的UUID
“复制”代码完全没有必要。谢谢@greybearedgeek,你的答案非常有用。=)♦, 是的,你说得对。我在“作弊”,没有遵守深度复制的规则。在某些情况下,这可能会带来麻烦。非常感谢你。