当前位置: 首页 > 网络应用技术

JDK的等效方法都是书面的,所以如何写?

时间:2023-03-09 13:15:19 网络应用技术

  Java程序员知道Java.lang.Object类,这是所有类别的超级类。对象类提供多种公共方法,例如::::

  第一种公共方法是提供所有要扩展的子类(封面),第二个是一般协议,即Java中的课程。因此,Java中的课程涵盖了这些方法,他们需要遵守共同协议以避免程序员自己玩。

  那么,我们应该如何掩盖,我们应该遵守那些一般协议吗?

  实际上,这是一个非常复杂的问题,正如Java大师Joshua Bloch所说:这似乎很简单,但通常许多高级程序员无法完全实施会导致非常严重的后果。

  总而言之,这是:当我们需要比较两个对象是否“相等”时,我们可能需要考虑重写等价方法。例如,我们需要类型整数和字符串的比较类型。这些类通常需要用于携带和比较值。等于或制作映射集合的关键值,在这些情况下,我们需要严格地重写等于的方法。(我在这里所说的是因为在许多情况下没有属性。我们可能不需要重写等价方法。对于那些场景,无需重写Equals方法。这将在稍后说!)

  有许多场景不需要实现等价方法。我们通常举一个例子:

  有一些重写看起来很简单的方法,但几乎不可能完全保证:

  看到这五个规则感觉很大,当我们写作时,我们根本没有考虑过如此多的框架。功能函数的逻辑仅相等!

  实际上,我认为这样做是完全错误的,因为如果有必要完全遵循其规范,那么许多面向对象的功能就无法使用,例如继承。

  实际上,Java的JDK中有一些代码对上述五个规格不满意。例如,让我们查看以下代码(猜猜它将输出什么?):

  是的,您阅读了正确的内容,第一个输出true和第二个输出false。明显对第二点不满意:对称性。

  基于这种情况,Java没有很好的解决方法。我只能告诉您,您不需要与日期和及时tamp混合,也不要等于比较日期和TimessTamp。这也可以在课堂上解释,并等于TimessTamp中的方法!

  我谈到了何时需要重写等于方法,何时不需要重写等于方法,并重写需要遵守的规则。在这里,我们谈论的是实现高质量等价方法的技巧。

  在这里,我将在Java.util.abstractset类中引用Equals方法,以解释如何编写高质量等价方法,因为Xiao Yan发现它非常经典。

  在Java.util.AbsTractset中等于方法:

  第一点:o ==这个

  使用==操作员,确定比较对象是否等于当前对象的引用。如果相同代表相同的对象,则返回到true。

  第二点:o实例集

  检查参数类型是否通过运算符实例操作员是否正确。如果类型不正确,则无需比较。

  第三点:c.size()!= size()

  这是抽象的特殊存在。并非所有这些都需要比较。比较的优点是无需比较每个域。如果大小不相等,则可以直接返回。通常,此性能更好!

  第四点:包含(c)

  比较此类中的每个域。如果所有域相等,则返回true,如果不相等,则返回false。

  第五点:重写哈希码

  重写等价方法时,请确保重写HashCode方法。例如

  第六点:请勿修改平等的参数类型(对象O)

  这似乎很简单,但是如果您不使用IDE自动生成的等价方法,但是您可以轻松地自己敲击代码,则很容易将对象类型更改为当前类类型。这种方法是错误的!因为这不是覆盖,这是超负荷