Effective Java - 类和接口 - 使可变性最小化

读书笔记 仅供参考

不可变类

不可变类就是实例不能被修改的类,每个实例中包含的所有信息都必须在创建该实例的适合提供,并一直固定不变
不可变类比可变类更加易于设计、实现和使用,不容易出错,且更加安全

五条规则

  • 不提供任何修改对象状态的方法
  • 保证类不会被扩展
  • 所有域都是 final
  • 所有域都是私有
  • 确保对于任何可变组件的互斥访问(对可变对象的引用)

函数的做法

方法返回一个函数的结果,函数对操作数进行运算但是并不修改它

public Complex add(Complex c) {
    return new Complex(re + c.re, im + c.im);
}

不可变对象的优点

  • 不可变对象比较简单,只有一种状态
  • 不可变对象本质上是线程安全的,不要求同步
  • 不可变对象可以被自由地共享
  • 不可变对象为其他对象提供了大量的构件

缺点

每一个不同的值都需要一个单独的对象,如果创建对象的代价太大,就会造成浪费。
如果执行一个多步骤的操作,并且每一个步骤都会产生一个新的对象,那么就会出现性能问题,解决方案

  • 猜测会经常用到哪些多步骤的操作,将它们作为基本类型提供。

设计方案

使类不允许自身被子类化:

  • 使类成为 final
  • 让类的所有构造器都变成私有的或者包级私有的,并添加公有的静态工厂代替公有的构造器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值