2015070704 - EffactiveJava笔记 - 第15条 使可变性最小(1)

来源:互联网 发布:vb代码的字体如何改 编辑:程序博客网 时间:2024/06/06 07:31

    20150707 星期二  北京

    不可变类只是对象不能被修改的类,每个对象包含的信息必须在类创建实例的时候提供,并且在对象生命周期内不变.

    为什么要存在不可变的类呢?不可变的类比可变类更加容易设计,实现和使用,不易出错,更加安全.

    使类不可变遵循五条原则:

    1.不要提供修改对象属性的方法.(只有get没有set)

    2.保证类不会被扩展.目的在于防止粗心或者恶意的子类假装对象状态已经修改,破坏类的不可变行为.防止子类化,一般使用final修饰类.

    3.所有的属性都是final的.如果一个指向新创建对象的引用在缺乏同步机制的情况下,从一个线程被传递到另一个线程,就必须确保正确的行为.

    4.所有的属性都是私有的.防止客户端获取属性引用的可变对象的权限,不允许直接修改对象.技术上允许不可变的类具有共有的final属性,只要其包含基本类型的值或者不可变对象的引用,但是不建议这么做,会使得以后无法改变内部表示方法(可扩展性差).

    5.确保对于任何可变组件的互斥访问.如果类具有指向可变对象的属性,则必须确保类的客户端无法获得指向这些对象的引用,并且永远不要用客户端提供的对象引用来初始化这样的属性,不提供任何方法来返回该对象的引用.在构造器和访问方法中使用保护性拷贝.

0 0
原创粉丝点击