加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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并将其实例传递给您的方法;然后,您的方法将在不知情的情况下修改对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读