gpt4 book ai didi

java - 如何保持引用可变对象的类的不可变性质?

转载 作者:行者123 更新时间:2023-12-02 11:02:22 30 4
gpt4 key购买 nike

我很清楚使类不可变的规则。但是考虑这样一种情况,我的类 A 组成类 B。类 B 在外部 jar 中,类 B 再次由 C 和 D 组成,即

class A{
B b;
}
// External library
class B{
C c;
D d;
}
class C{
}
class D{
}

如果我无法修改外部库中的类,如何使 A 类不可变?如果外部库中的类是可修改的,我可以实现可克隆,但这是不可能的,因为我无法修改它们。

最佳答案

您应该创建可变实例的防御性副本:

class A {

private final B b;

public A(B b) {
// Create a defensive copy of b
this.b = new B(b);
}
}

如果B没有提供这样的复制构造函数,您将需要自己为B实现防御性复制。

如果您不这样做,我可以将 B 的实例传递给 A,同时也将 B 的实例保留给我自己并在以后按照我自己的意愿对其进行变异。

关于java - 如何保持引用可变对象的类的不可变性质?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51225637/

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