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

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

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

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

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

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

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

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

相关推荐

    Oracle数组的使用

    `ASSOCIATIVE ARRAY` 是一种可变大小的数组结构,其索引可以是任何整数值,而不是像 `VARRAY` 那样只能是连续的整数。这种类型的数组非常适合用于存储具有特定关联键的数据集。 ##### 常用操作 - **COUNT**:返回...

    C语言数组-C语言实现使用动态数组来构建循环链表.zip

    数组的大小在声明时必须指定,并且在程序运行期间是不可变的。然而,有时候我们可能需要处理不确定数量的数据,这时静态数组的局限性就显现出来了。在这种情况下,动态数组成为了一个很好的解决方案。 动态数组在...

    数组和指针之间的区别与联系

    指针可以指向堆上的动态内存,大小可变。 3. **名称含义**:数组名代表整个数组,而指针变量存储的是地址。 4. **类型表示**:数组类型如`int[5]`,指针类型如`int*`。 5. **操作方式**:数组名在某些情况下会“退化...

    动态数组运用

    【动态数组运用】 动态数组是一种在编程中非常实用的数据结构,尤其在处理不确定大小的数据集时。它们允许我们在程序运行时根据...通过熟练掌握动态数组的创建、使用和释放,我们可以编写出更加高效和适应性强的程序。

    list转换成string数组

    - **String**:`String`类代表字符序列,是不可变的对象。`String`对象一旦创建后,其内容就不能改变。 - **数组(Array)**:数组是一种基本的数据结构,用于存储固定大小的同类型元素。在Java中,数组的大小是固定的...

    c++ 课件 数组 引用

    字符数组可以赋值为双引号包围的字符串字面量,但需要注意字符串常量是不可变的。如果需要修改字符串,可以使用`std::string`类。 总的来说,数组、指针和引用在C++中扮演着基础而重要的角色,它们提供了灵活的数据...

    C语言可变长数组(VLA)详解与应用

    ### C语言可变长数组(VLA)详解与应用 ...通过本文的详细介绍,读者应该对C语言中的可变长数组有了深入的理解,包括其语法、使用场景、限制和替代方案。希望这些知识能够帮助读者在C语言编程中做出更合理的选择。

    C语言实现使用动态数组来构建循环链表.zip

    在C语言中,我们不能像在其他高级语言中那样直接创建可变大小的数组。但是,我们可以使用`malloc()`、`calloc()`或`realloc()`函数来动态分配内存。动态数组允许我们在程序运行期间改变数组的大小,这对于处理不确定...

    浅谈C++内存分配及变长数组的动态分配

    在C++编程中,内存管理是一项关键技能,尤其是在涉及动态分配和变长数组时。本文将探讨C++的内存分配机制以及如何动态...动态分配内存和变长数组提供了灵活性,但也需要谨慎处理,遵循上述最佳实践,以避免内存错误。

    Java数组与集合

    集合的一个重要特性是可变性,它们的大小可以根据需要动态增长。例如,`Collections.sort(list)`可以对List接口的实现类进行排序,前提是列表中的元素实现了Comparable接口,或者在调用sort时传入自定义的Comparator...

    java集合与数组的相同点和不同点

    1. 长度的可变性:这是数组和集合最显著的区别。数组的长度在声明时指定,之后不能更改,而集合的长度可以在程序运行时动态扩展或收缩。 2. 类型约束:数组只能存储同一种类型的元素,这意味着数组中的所有元素必须...

    JavaScript数组

    - **可变性:**数组的长度可以在运行时改变。 - **索引访问:**可以通过索引访问数组中的元素。 **示例代码:** ```javascript var arr = [1, true, null, undefined, { x: 1 }, [1, 2, 3]]; ``` - **创建数组:**...

    【03-流程控制与数组】

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

    c语言实现动态数组代码

    动态数组,也被称为可变大小数组或动态大小数组,与传统的静态数组有着显著区别。静态数组在声明时就需要指定固定的大小,一旦定义,大小便无法改变。而动态数组则允许在程序运行期间动态调整其大小,这主要得益于...

    C语言动态数组.docx

    标题中的"C语言动态数组"指的是在C语言编程中使用动态内存分配来创建可变大小的数组。动态数组允许程序员在程序运行时根据需要调整数组的大小,而不是在编译时预设固定大小。这种技术主要涉及到`malloc()`, `calloc...

    java中的数组和集合.docx

    集合框架提供了一组灵活的数据结构,可以存储和操作数目可变的数据集。与数组相比,集合具有以下优势: 1. **动态调整大小**:集合的大小可以根据需要自动扩展或收缩。 2. **多样化的实现**:Java集合框架提供了多种...

    数组和指针的关系

    `,它是一个不可变的指针,意味着你不能改变`cptr`所指向的地址,但可以通过它来修改所指向的值(如果值是可变的)。 数组和指针的相似之处在于,当数组作为函数参数传递时,通常会“降级”为指针,因为数组的名称...

    Oracle定义联合数组及使用技巧

    在Oracle 10G及其之前的版本,联合数组主要使用数字索引,而在10G之后,引入了变长字符串作为唯一索引的可能性,增强了灵活性。 联合数组的定义有两种基本语法。第一种是以PLS_INTEGER或BINARY_INTEGER作为索引,如...

    数组模仿ArrayList

    ArrayList则是通过动态数组来模拟可变大小的列表,当添加或删除元素时,它会自动调整数组的大小以适应需求。因此,模仿ArrayList的第一步就是创建一个可扩展的数组。 ```java public class MyArrayList<T> { ...

    java可变参数[文].pdf

    - 可以传递零个参数,如`sumUp()`,这会被编译器处理为`sumUp(new int[]{})`,传入一个空数组,而不是null。 4. **处理可变参数** - 在方法内部,可变参数实际上是一个数组,可以通过数组操作来处理这些参数,...

Global site tag (gtag.js) - Google Analytics