`
xnnyygn
  • 浏览: 42813 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

“支持非可变性”和“使用空数组而不是NULL”

阅读更多
最近拿到了《Effective Java》这本书,虽然有点旧,而且其中讲述的java是1.3左右,不过其中的一些思想到现在也可以使用。

首先被我实践使用的是下面两个原则:
1:支持非可变性
2:使用空数组而不是NULL

支持非可变性主要是通过一下几个方法来实现的:
1:不提供修改对象的方法,比较典型的是setXXX
2:保证没有可被子类改写的方法,可以通过设置类为final来完成
3:使所有域都是final的,这一步没有完全理解,可能和线程同步有关
4:使所有域都是私有的,貌似private好不够,需要和final搭配
5:保证对于任何可变组件的互斥访问,可以使用保护性拷贝

我的个人感觉,如果你的类只是包含原始数据类型的对象,就是不存在是否引用的那种,那么这里的方法要简单很多,不过如果不是的话(一般都不是),那么就需要仔细考虑了。

第二个比较容易理解,因为在了解了NullObject之后,其实这里的这个空数组也可以看作为NullObject的一种退化。

对于我来说,第二个比较容易实践,而第一个其实还存在一些问题。
分享到:
评论

相关推荐

    【03-流程控制与数组】

    •只要类型相互兼容,可以让一个数组变量指向另一个实际的数组,这种操作会产生数组的长度可变的错觉。 •但由于数组变量整体赋值导致的数组的长度可以改变,只是一个假相。 基本类型数组的初始化 •对于...

    C# 程序设计手册(WORD)

    使用 ref 和 out 传递数组 42 隐含型别数组 44 字符串 45 字符串基本概念 46 串连多个字符串 53 修改字符串内容 56 比较字符串 60 分割字符串 65 使用字符串方法搜寻字符串 66 使用正则表达式搜寻字符串 67 判断字符...

    《你必须知道的495个C语言问题》

    5.10 但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 58  5.11 我曾经使用过一个编译器,不使用NULL就不能编译。 58 5.12 我用预处理宏#define Nullptr(type)(type...

    你必须知道的495个C语言问题

    5.10但是如果NULL的值改变了,比如在使用非零内部空指针的机器上,用NULL(而不是0) 不是更好吗? 5.11 我曾经使用过一个编译器,不使用NULL就不能编译。 5.12 我用预处理宏#defineNullptr(type)(type*)0帮助...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    18.5 可变性和泛型接口 340 18.5.1 协变接口 341 18.5.2 逆变接口 343 第18章快速参考 345 第19章 枚举集合 347 19.1 枚举集合中的元素 347 19.1.1 手动实现枚举器 348 19.1.2 实现ienumerable接口 352 19.2...

    JavaScript权威指南(第六版) 清晰-完整

    3.7 不可变的原始值和可变的对象引用 3.8 类型转换 3.9 变量声明 3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 ...

    JavaScript权威指南(第6版)(附源码)

    3.7 不可变的原始值和可变的对象引用 3.8 类型转换 3.9 变量声明 3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 ...

    JavaScript权威指南(第6版)(中文版)

    3.7 不可变的原始值和可变的对象引用 3.8 类型转换 3.9 变量声明 3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 ...

    JavaScript权威指南(第6版)

    3.7 不可变的原始值和可变的对象引用 3.8 类型转换 3.9 变量声明 3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 ...

    JavaScript 权威指南(第四版).pdf

     3.7 不可变的原始值和可变的对象引用47  3.8 类型转换48  3.9 变量声明55  3.10 变量作用域56  第4章 表达式和运算符60  4.1 原始表达式60  4.2 对象和数组的初始化表达式61  4.3 函数定义表达式62  4.4 ...

    JavaScript权威指南(第6版)中文版pdf+源代码

     3.7 不可变的原始值和可变的对象引用47  3.8 类型转换48  3.9 变量声明55  3.10 变量作用域56  第4章 表达式和运算符60  4.1 原始表达式60  4.2 对象和数组的初始化表达式61  4.3 函数定义表达式62  4.4 ...

    超级有影响力霸气的Java面试题大全文档

    此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),...

    java 面试题 总结

    此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),...

    JavaScript权威指南(第6版) 中文版

    3.7 不可变的原始值和可变的对象引用 47 .3.8 类型转换 48 3.9 变量声明 55 3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问...

Global site tag (gtag.js) - Google Analytics