gpt4 book ai didi

java - Java 有引用所有权或不可复制类的概念吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:27 24 4
gpt4 key购买 nike

我想保证某些特定类 Content 的实例只能由其“所有者”访问,并且如果另一个对象想要相同的 Content 它需要进行深拷贝。来自 C++,我会使用 unique_ptr 实现,Java 中有类似的东西吗?

目前,我正在解决这个问题,方法是将 Content 保留在我保留的所有地方,并注意创建一个新的 Content (构造函数实现深层复制机制)一个 getContent。但是我无法强制 Content 类的其他可能用户遵循相同的模式,这很容易忘记。如果它能以某种方式照顾好自己,比如不可复制,那就更好了。

我意识到这有点违背语言的精神,但在某些情况下我认为这是合理的。例如,如果 Content 表示即使通过读取也被修改的一些数据流。我想,如果不是在核心语言中,也许有一些 @interface 用于编译时检查或创建它的方法?

编辑:这个想法是所有者可以在进行复制之前或之后自由修改对象,如果有人进行深度复制,他们可以修改他们的(不影响原始文件),因此使 Content 不可变有点过于苛刻(除非我误解了这意味着什么)。

最佳答案

这里有一些常见的策略:

防御性复制的隐私

在这个策略中,你会让所有者拥有对内容的私有(private)引用,并且如果它适合分发该内容的副本,则通过防御副本来这样做:

class Owner {
private Content content;

// ...unnecessary detail omitted...

public Content getContent() {
return new Content(this.content);
}
}

Cloneable interface有时在这里很有用。

不可变对象(immutable对象)

另一种常见策略是使用不可变对象(immutable对象)(例如,确保Content一旦实例化,就无法修改)。然后您不关心谁引用了内容,因为他们无法更改内容。

关于java - Java 有引用所有权或不可复制类的概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40400353/

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