为什么比较平等的声明?(Why does Comparator declare equals?)

2019-06-25 11:25发布

Comparator接口都有自己equals()方法。 任何类将得到equals()通过Object类的默认值。 什么是需要有equals()的接口里面的方法?

Answer 1:

Comparator细化的合同Object.equals :它必须满足列明限制Object.equals ,然后一些

此外,仅当指定的对象也是一个比较,并且强行相同的顺序,因为这比较这种方法可以返回true。 因此, comp1.equals(comp2)意味着sgn(comp1.compare(o1, o2))==sgn(comp2.compare(o1, o2))为每一个对象引用o1o2

声明一个equals内部Comparator允许您在Javadoc的形式记录本。

请注意,API的文档,也可作为合同,所以它不是这里只是化妆品。 这是明确的限制,其他的代码和你的代码可以依靠。

在你有不够成熟的方法类似的情况,它也可以作为记录的意图。 即, Interface.method应该在那里,不管其超强的界面如何演变。



Answer 2:

从Java 单证 ,为什么原因Comparator有它自己equals()方法:

然而,重写此方法可以在某些情况下,通过允许程序确定两个不同的比较征收同样为了提高性能



Answer 3:

阅读它的Javadoc 。 它的存在只是为了解释什么equals()必须返回,如果您选择覆盖它在一个类实现比较。 你可能会认为没有比较可以等于任何其他的,但它并非如此。 你可能会认为两个比较相等,当他们返回同样的事,任何参数,但它并非如此。 Javadoc中解释说,两个比较,如果他们征收同样的排序,无论参数给出相等。 的Javadoc还说:

需要注意的是它始终是安全没有覆盖的Object.Equals(对象)

大多数时候,你没有重载equals()的比较。



Answer 4:

从文档 :

它始终是安全没有覆盖的Object.Equals(对象)。 然而, 重写此方法可以在某些情况下,通过允许程序确定两个不同的比较征收同样为了提高性能



Answer 5:

技术上,方法的声明是多余的(编译器不关心),但...

声明在此界面equals方法使得呼叫者和不同比较器之间的合同的一部分,并允许它以指定/延长其语义。

它指定了两个比较,只有当他们处以相同的排序与他们的比较()方法相同。 这个延伸的Object.Equals()的语义,并且因此必须在接口进行记录。



Answer 6:

equals()在方法Comparator被提供给强制用户实现Comparator接口来实现equals()在除了已经施加在那些一些额外的规则和约束equals()Object

额外的规则是:

此方法必须遵守的Object.Equals(对象)的总承包合同。 此外,仅当指定的对象也是一个比较,并且强行相同的顺序,因为这比较这种方法可以返回true。 因此,comp1.equals(COMP2)意味着SGN(comp1.compare(O1,O2))== SGN(comp2.compare(O1,O2))为每个对象参考O1O2。



Answer 7:

在接口声明中把一个对象的方法允许的Javadoc声明的意思是需要在实现该接口的类等于。



Answer 8:

Comparator interface have their own equals() method

好,。 首先,应该明确的是,每当你实现可比的界面,你应该提供你的程序时,对象是相等的,小于或大于决定。

I am quite confuse about have equals() inside Comparator. Any class will get equals() by default through Object class.

了equals()方法实现ü从对象类仅检查两个referances是否指向相同的对象或不继承。 它不到风度适用任何比较。 这是你谁将会在你的类提供(或可能在你的接口)的标准,对象是相等的。

Then what is need to have equals() method inside an interface?

很显然,当你实现当对象较少,大于当他们是平等的,你必须实现。 因此,而不是依赖于默认的对象equals()方法,你应该提供你的逻辑来检查平等



文章来源: Why does Comparator declare equals?