【震惊】读Java2核心技术

如下:


equals少用,用equals的人思维还是停留在变量数字上,对象无需比较,只有其中基础属性才需要

这怎么可能呢?
equals是Object对象提供的比较的方法,非常有用!
举个例子:jdk的集合Collection接口,提供的 boolean contains(Object o)方法,依靠的就是equals方法来判断一个对象是否在集合中的!你怎么能说少用equals呢?那你告诉我,如果不用equals比较,那Collection的contains方法要如何实现?
bang,你是否从来也不看这些基础类库啊?或许你可以使用自己的方式来构建自己的集合框架而不用使用Collection.

这句话我可不赞同,这个方法是很重要的一个方法,通过改写该方法可以达到多态的效果

实体对象需要用标记来跟踪,值对象才会根据里面的属性来比较是否相同。

好奇这个争论,从没考虑过太特别的东西,都是需要就用equals了。

静观大家争论。

>>实体对象需要用标记来跟踪,值对象才会根据里面的属性来比较是否相同
非常好
不过我确实比较奇怪为什么写Java类库的程序员都写不好equals,能高效实现hashcode的估计就更少了

>值对象才会根据里面的属性来比较是否相同
值对象也无需比较,因为值对象就是不变的对象,既然没有变化何来比较;值对象采取复制或共享方式被实体使用,也就是人手一份或大家共享一份,何须比较你手里的值对象和我手里的值对象有何区别呢?

买电视机不必打开电视机看里面的核心技术,核心技术再惊人只能说明SUN公司这样电视机制造商水平高,对你使用者无太大帮助,反而浪费时间精力,时间宝贵啊。

[该贴被banq于2008-12-10 09:32修改过]

bang的说法实在让人难以信服。
何谓值对象无需比较?怎么可能?
有时候值对象是要被修改的,有可能我们会判断一下传过来的值对象是否和当前的实体对象内的值对象是否相同,不同的话,我们可能会对实体对象做些别的操作等等。。。。请不要一概而论!
另外,核心技术当然有必要看看了!假如我们的电视机坏掉了,而我们简单的检查一下发现原来是一个晶体管烧掉了(因为这个晶体管已经明显鼓起来了,正常情况下是平的),于是我们拔掉它,按照原来的规格,替换一个新的上去,ok,电视机修好了。这是一个很棒的事情。
[该贴被newthinker于2008-12-10 09:45修改过]

>有可能我们会判断一下传过来的值对象是否和当前的实体对象内的值对象是否相同

那它就不是值对象,我们必须保证对象生命周期的一致性。equals比较其实也属于对象生命周期一个课题。
[该贴被banq于2008-12-10 10:17修改过]

bang的说法实在神奇。
我始终也不认为实体的值对象不跟别的值对象做比较操作是什么设计原则。
翻遍evans ddd你也找不到任何理由拒绝实体对象的值对象跟别的值对象做比较操作。

>实体的值对象不跟别的值对象做比较操作是什么设计原则
可能我们理解出发点不一样吧,不变性是值对象的设计原则,什么叫不变,就是内容不变,就是没有变化,没有变化还需要比较吗?我是从这个简单的中文意思来推理的,如果有变化,就更换全部的值对象,所有值对象共同进出,这是生命周期。以上是我的理解角度。我也尊重你的理解。

[该贴被banq于2008-12-10 11:11修改过]

为什么说值对象是不变的对象?

值对象是不需要持久化的

讨论这个有意思吗???equals虽然经常用到,但真正用到的也就那么几个,其他的基本可以不用去理会他,他究竟是怎么工作的对你而言也不是很重要,要知道,java有重写功能,重写一个符合自己要求的equals难道很难吗???