2015070704 - EffactiveJava笔记 - 第15条 使可变性最小(1)
2015-07-07 07:43
429 查看
20150707 星期二 北京
不可变类只是对象不能被修改的类,每个对象包含的信息必须在类创建实例的时候提供,并且在对象生命周期内不变.
为什么要存在不可变的类呢?不可变的类比可变类更加容易设计,实现和使用,不易出错,更加安全.
使类不可变遵循五条原则:
1.不要提供修改对象属性的方法.(只有get没有set)
2.保证类不会被扩展.目的在于防止粗心或者恶意的子类假装对象状态已经修改,破坏类的不可变行为.防止子类化,一般使用final修饰类.
3.所有的属性都是final的.如果一个指向新创建对象的引用在缺乏同步机制的情况下,从一个线程被传递到另一个线程,就必须确保正确的行为.
4.所有的属性都是私有的.防止客户端获取属性引用的可变对象的权限,不允许直接修改对象.技术上允许不可变的类具有共有的final属性,只要其包含基本类型的值或者不可变对象的引用,但是不建议这么做,会使得以后无法改变内部表示方法(可扩展性差).
5.确保对于任何可变组件的互斥访问.如果类具有指向可变对象的属性,则必须确保类的客户端无法获得指向这些对象的引用,并且永远不要用客户端提供的对象引用来初始化这样的属性,不提供任何方法来返回该对象的引用.在构造器和访问方法中使用保护性拷贝.
不可变类只是对象不能被修改的类,每个对象包含的信息必须在类创建实例的时候提供,并且在对象生命周期内不变.
为什么要存在不可变的类呢?不可变的类比可变类更加容易设计,实现和使用,不易出错,更加安全.
使类不可变遵循五条原则:
1.不要提供修改对象属性的方法.(只有get没有set)
2.保证类不会被扩展.目的在于防止粗心或者恶意的子类假装对象状态已经修改,破坏类的不可变行为.防止子类化,一般使用final修饰类.
3.所有的属性都是final的.如果一个指向新创建对象的引用在缺乏同步机制的情况下,从一个线程被传递到另一个线程,就必须确保正确的行为.
4.所有的属性都是私有的.防止客户端获取属性引用的可变对象的权限,不允许直接修改对象.技术上允许不可变的类具有共有的final属性,只要其包含基本类型的值或者不可变对象的引用,但是不建议这么做,会使得以后无法改变内部表示方法(可扩展性差).
5.确保对于任何可变组件的互斥访问.如果类具有指向可变对象的属性,则必须确保类的客户端无法获得指向这些对象的引用,并且永远不要用客户端提供的对象引用来初始化这样的属性,不提供任何方法来返回该对象的引用.在构造器和访问方法中使用保护性拷贝.
相关文章推荐
- Java文如何制作帮助文档4
- 2015070702 - EffactiveJava笔记 - 第14条 共有类使用访问方法而非共有属性
- 2015070701 - EffactiveJava笔记 - 第13条 使类和成员的可访问性最小(3)
- java学习篇-------字符串和文本I/O
- java HashMap以及concurrenHashMap
- javaweb(一):sax解析xml
- eclipse安装freemarker插件
- Spring 源码导入到 Eclipse
- java中比较两个日期的先后
- SpringMVC form标签
- Java
- Java
- Java
- Java实战案例课程
- Java中的一些基础概念
- Java自定义注解和运行时靠反射获取注解
- Ubuntu中,关于的Java一切
- SpringFramework4系列之SpringJMS:(四)异步接收消息 1.基本介绍
- SpringFramework4系列之SpringJMS:(五)Jms namespace的使用
- java基础知识--enu 4000 m语法