Effective Java: Item 24: Make defensive copies when needed

来源:互联网 发布:流水账软件免费下载 编辑:程序博客网 时间:2024/05/22 14:05

 

 

但是这种方式会导致在如下情况下不知不觉地改变Period中end的值。这可能是我们不愿意的。

 

因此我们要才用如下防御性的复制(defensive copy)方法

 

而在Flex当中我们会发现ArrayCollection的一个问题就是因为没有采用防御性地复制,如 

 

防御性复制的另一个相关问题还体现在get方法当中,如下

 

解决方法就是

 

 

在这里为什么用clone而不是前面用new Date(time)构造函数,因为前面如果用clone的话,不能确定返回值一定是Date类型,注意clone的返回值是Object,而这里用clone是因为我们明确知道它是Date类型了,其返回值肯定也是Date了。

 

还有一点很有意思的是,考虑到这种get会影响到类的muttable性质,所以Date.getTime返回的不是Date类型,而是long,这样就强迫你自己利用构造函数new Date(long time)来生成新的Date。

 

 

Effective Java原来还是有些东西是没有注意的。再看看。

原创粉丝点击