定义不可变对象的策略---粗略翻译自文档

简介: 定义不可变对象的策略---粗略翻译自文档

定义不可变对象的策略


一、原文截图
image.png

二以下是翻译
以下规则定义了用于创建不可变对象的简单策略。并非所有记录为“不可变”的类都遵循这些规则。这并不一定意味着这些类的创建者是草率的——他们可能有充分的理由相信他们的类的实例在构建后永远不会改变。但是,此类策略需要复杂的分析,不适合初学者。

1.不要提供“setter”方法,即修改字段或字段引用的对象的方法。
使所有字段最终且私有。
2.不允许子类重写方法。执行此操作的最简单方法是将类声明为 final。更复杂的方法是使构造函数私有并在工厂方法中构造实例。
3如果实例字段包含对可变对象的引用,则不允许更改这些对象:
(1)不要提供修改可变对象的方法。
(2)不要共享对可变对象的引用。从不存储对传递给构造函数的外部可变对象的引用;如有必要,请创建副本,并存储对副本的引用。同样,必要时创建内部可变对象的副本,以避免在方法中返回原始对象。

此截图摘自:
https://docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html

相关文章
|
3月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
66 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
存储 Java
[初始java]——规范你的命名规则,变量的使用和注意事项,隐式转化和强制转化
[初始java]——规范你的命名规则,变量的使用和注意事项,隐式转化和强制转化
164 0
|
前端开发
前端学习案例3-this指向问题-隐式调用规则
前端学习案例3-this指向问题-隐式调用规则
80 0
前端学习案例3-this指向问题-隐式调用规则
|
前端开发
前端学习案例4-this指向问题-隐式调用规则2
前端学习案例4-this指向问题-隐式调用规则2
78 0
前端学习案例4-this指向问题-隐式调用规则2
|
JavaScript 网络架构
ES6知识点补充——剩余参数、展开语法
JS查漏补缺系列是我在学习JS高级语法时做的笔记,通过实践费曼学习法进一步加深自己对其的理解,也希望别人能通过我的笔记能学习到相关的知识点。这一次我们来了解剩余参数、展开语法
197 0
|
Rust 自然语言处理 算法
【算法】1389. 按既定顺序创建目标数组(多语言实现)
给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组: 目标数组 target 最初为空。 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。 重复上一步,直到在 nums 和 index 中都没有要读取的元素。 请你返回目标数组。 题目保证数字插入位置总是存在。
【算法】1389. 按既定顺序创建目标数组(多语言实现)
|
编译器 Scala 开发者
类型匹配的注意事项和细节 | 学习笔记
快速学习类型匹配的注意事项和细节
|
Swift
Swift实用小册07:枚举的创建、使用、遍历、关联值、原始值
Swift实用小册07:枚举的创建、使用、遍历、关联值、原始值
432 0
Swift实用小册07:枚举的创建、使用、遍历、关联值、原始值
【自然框架】 页面里的父类—— (补充)
没想到下午发的《【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。 》启发了热烈讨论,还以为又是一大堆的口水回复呢。看到大家的热烈讨论我很高兴,这才是我希望的讨论环境,无论是支持的还是反对的,我都非常感谢。
980 0
|
SQL 缓存 JavaScript
【自然框架】 页面里的父类—— 改进和想法、解释
1、 从Control到GridView继承了多少层? (这个图可不是现做的,这是以前为了写QuickPager分页控件而弄的。http://www.cnblogs.com/jyk/archive/2009/04/29/1446033.html )        看上面的类图,远远超过三层了吧。
1220 0