Java - 作为 this.uuid = original.getUUID() 对 UUID 字段进行深度复制是否安全?
Java - Is it safe to do deepCopy of UUID field as this.uuid = original.getUUID()?
对于下面的class,当我做深拷贝的时候,把代码写成
安全吗
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();
也许这是一个愚蠢的问题,感谢您抽出时间来帮助我。
A "deep copy" 意味着对象树中的每个对象都是一个 new 实例。通过执行
this.id = original.getId();
您正在使用与原始对象相同 UUID 对象。
您找到的代码是如何制作 copy UUID 对象,使其具有相同的值。为安全起见,没有必要复制 UUID,因为 UUID class 是 immutable; from its javadoc:
A class that represents an immutable universally unique identifier (UUID).
然而,可能还有其他支持制作副本的考虑因素。
是的,很安全。 UUID 是不可变的。
如您所见,您从未修改过实例,您只是为您的成员分配了一个新实例。因此,您永远不会影响任何其他代码的 UUID,即使它们最初引用了与您相同的代码。
'copy' 代码完全没有必要。
对于下面的class,当我做深拷贝的时候,把代码写成
安全吗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();
也许这是一个愚蠢的问题,感谢您抽出时间来帮助我。
A "deep copy" 意味着对象树中的每个对象都是一个 new 实例。通过执行
this.id = original.getId();
您正在使用与原始对象相同 UUID 对象。
您找到的代码是如何制作 copy UUID 对象,使其具有相同的值。为安全起见,没有必要复制 UUID,因为 UUID class 是 immutable; from its javadoc:
A class that represents an immutable universally unique identifier (UUID).
然而,可能还有其他支持制作副本的考虑因素。
是的,很安全。 UUID 是不可变的。
如您所见,您从未修改过实例,您只是为您的成员分配了一个新实例。因此,您永远不会影响任何其他代码的 UUID,即使它们最初引用了与您相同的代码。
'copy' 代码完全没有必要。