gpt4 book ai didi

java : Question regarding immutable and final

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

我正在阅读 Effective Java 这本书。

在 Minimize Mutability 项目中,Joshua Bloch 谈到了使类不可变。

  1. 不要提供任何修改对象状态的方法——这样没问题。

  2. 确保类不能被扩展。 - 我们真的需要这样做吗?

  3. 将所有字段设为最终字段 - 我们真的需要这样做吗?

例如,假设我有一个不可变类,

class A{
private int a;

public A(int a){
this.a =a ;
}

public int getA(){
return a;
}
}

从 A 扩展的类如何损害 A 的不变性?

最佳答案

像这样:

public class B extends A {
private int b;

public B() {
super(0);
}

@Override
public int getA() {
return b++;
}
}

从技术上讲,您并不是在修改从 A 继承的字段,但在不可变对象(immutable对象)中,重复调用同一个 getter 显然会产生相同的数字,但事实并非如此在这里。

当然,如果您坚持规则 #1,则不允许创建此覆盖。但是,您不能确定其他人会遵守该规则。如果您的方法之一将 A 作为参数并对其调用 getA(),则其他人可能会如上所述创建类 B 并且将它的一个实例传递给你的方法;然后,您的方法将在不知情的情况下修改对象。

关于java : Question regarding immutable and final,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581220/

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