java:关于不可变和最终的问题
发布时间:2020-12-15 05:06:28 所属栏目:Java 来源:网络整理
导读:我正在读“Effective Java”一书. 在最小化可变性项目中,Joshua Bloch讨论了使一个类不可变的问题. 不要提供任何修改对象状态的方法 – 这很好. 确保无法扩展类. – 我们真的需要这样做吗? 让所有领域最终 – 我们真的需要这样做吗? 例如,假设我有一个不可
我正在读“Effective
Java”一书.
在最小化可变性项目中,Joshua Bloch讨论了使一个类不可变的问题. >不要提供任何修改对象状态的方法 – 这很好. 例如,假设我有一个不可变类, 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继承的字段,但是在一个不可变对象中,同一个getter的重复调用当然应该产生相同的数字,这不是这里的情况. 当然,如果您坚持使用规则#1,则不允许您创建此覆盖.但是,您无法确定其他人是否会遵守该规则.如果你的一个方法将A作为参数并在其上调用getA(),则其他人可以如上所述创建类B并将其实例传递给您的方法;然后,您的方法将在不知情的情况下修改对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |