gpt4 book ai didi

java - 作为参数传递时使对象不可变

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:16 25 4
gpt4 key购买 nike

当作为参数传递时,我可以使对象不可变吗?这样被调用的方法不能改变它但被调用者可以?

所以我有这样的东西:

Class Car {
Wheel wheel_1;

Axis axis = new Axis(wheel_1);
}


Class Wheel {
int size;

setSize(int size) {}
int getSize() {}
}

现在我要造一辆带轮子的汽车。然后我想从 class car 构造一个轴。

为此,我将 wheel_1 传递给 Axis 的构造函数。

现在我的问题是:我能否以某种方式确保 Axis 的构造函数不会更改 wheel_1 的大小,但 class car 可以更改它。

最佳答案

是的。通常这是通过使用 copy-constructor 来完成的。对于 Wheel 类。

例如:

wheel_1 = new Wheel(wheel);

请记住,Wheel 类需要以支持这一点的方式编写。也就是说,它应该提供一个复制构造函数。

注意:这并没有使对象不可变。它只是生成了一份副本,您类(class)以外的任何人都无法对其进行编辑。

如果您从任何其他方法返回 Wheel 实例,请务必在退出时也进行防御性复制:

Wheel getWheel() {
return new Wheel(wheel_1);
}

最后,值得一提的是,尽可能创建不可变类总是一个好主意。因此,也许您可​​以通过实际使 Wheel 不可变来避免这个问题?

关于java - 作为参数传递时使对象不可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16101577/

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