为了使一个类成为非可变类,要遵循下面五条规则:
- 不要提供任何会修改对像的方法;
- 保证没有可被子类改写的方法;
- 使所有的域都是final的;
- 使所有的域都成为私有的;
- 保证对于任何可变组件的互斥访问。(如果一个类指向可变对象的域,则必须确保该类的客 户无法活得指向这些对象的引用,并且永远不要用客户提供的对象引用来初始化这样的域,也不要在任何一个访问方法中返回该对象的引用);
以上规则比真正的要求强了一点,为了提高性能可以有所方式,如:保证没有一个方法能够对对象的状态产生外部可见的改变,许多非可变的类拥有一个或者多个非final的冗余域,把一个开销昂贵的计算结果缓存在这些域中。非可变对象本质上是线程安全的,它们不要求同步。非可变对象可以被自由地共享。你不仅可以共享非可变对象,甚至也可以共享它们的内部信息。非可变对象为其他对象--无论是可变的还是不可变的--提供了大量的构件。非可变类真正唯一的缺点是,对于每一个不同的值都要求一个单独的对象。String就是这样的。通常有个解决的办法就是提供一个帮助类来弥补,例如StringBuffer类。
如果一个类不能被做成非可变类,那么你仍然应该尽可能地限制它的可变性。
构造函数应该创建完全初始话的对象,所有的约束关系应该在这时候建立起来,构造函数不应该吧“只构造看一部分的实例”传递给其他的方法,不应该在后者函数之外子踢狗一个公有的初始化方法。
使一个类成为非可变类有如下三种方法:
- 将一个类声明为final类型的;
- 让该类中的每一个方法都成为final的,这种方法的好处在于其子类可以继续扩展新的方法;
- 把类的构造函数声明为私有的或者包级私有的,增加静态工厂方法,来代替公有的构造函数;(该方法虽然不常用,但却是最值得推荐的)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ilibaba/archive/2009/01/20/3839519.aspx
分享到:
相关推荐
名人档案(辛弃疾、李清照)(1).docx
._moood UI KitAdobeXD源码下载设计素材UI设计
full_circle_appAdobeXD源码下载设计素材UI设计
Gym_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计
sql,SQL(Structured Query Language,结构化查询语言)是一种标准化的语言,用于在关系数据库管理系统(RDBMS)中存取和操作数据。SQL 使得用户能够访问和操作数据库中的数据,包括数据的查询、插入、更新和删除,以及数据库结构的创建和修改。
一个很烂的项目但是获第二十二届江西省学生信息素养提升实践活动一等奖、第三十八届江西省青少年科技创新大赛二等奖
JAVA文件压缩与解压缩实践(源代码+论文)
Event_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计
这是宁波创客大赛 Timer 项目的Github
汽车价格离群值检测.zip
大家好!这是近期通过前端技术实现的一个“酷炫黑白粒子空间旋转特效”,本资源包含完整的可执行代码(下载文件,解压后可以点击运行)和运行特效展示,该内容已经在博客中记录:https://xiexu.blog.csdn.net/article/details/132677358(预计于2025年发布)。欢迎正在学习前端的朋友下载练手~
JAVAWEB网络相册
codeforce Rudolf and the Another Competition的C语言写法(用了sort)
打印模板乐器五线谱A4打印模板高清待办练字模板PDF下载
物流大数据服务平台HTML模板源码 大数据大屏展示源码 VUE
FANUC 操作手册
南京大学南园教学楼 7.m4a
人工智能的基础数学.pdf
【资源说明】 Java毕业设计 基于springboot学生成绩可视化系统源码+部署文档+全部数据资料.zipJava毕业设计 基于springboot学生成绩可视化系统源码+部署文档+全部数据资料.zipJava毕业设计 基于springboot学生成绩可视化系统源码+部署文档+全部数据资料.zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
AEM-CoreComponents-UI-KitAdobeXD源码下载设计素材UI设计