【发布时间】:2015-04-19 14:30:14
【问题描述】:
我有一个特点,我知道引用相等永远不是equals 的正确实现。许多用户可以编写 trait 的实现,实践表明有时他们无法覆盖 equals。有没有办法要求它?
在实践中,实现通常是 case 类,它会自动覆盖 equals,我们可以通过将 Product 作为 trait 的自类型来接近要求 that,但是,我会希望看到一个允许非案例类也覆盖equals 的解决方案(编辑:使用scala.Equals 作为自我类型更接近我想要的,因为它仍然由案例类自动实现,但可以由非案例类有效地实现,对编写实现的人来说不是很大的负担)。
我在写这个问题时想到的另一种方法是覆盖特征中的equals 以调用抽象方法,但不幸的是,这不适用于案例类实现。
【问题讨论】:
-
怎么样 - trait Foo{ override def equals(obj: scala.Any): Boolean = ??? }
-
您能否详细描述一下不适用于案例类实现? This worksheet 对我很好
-
@Maxim 问题是当
equals在一个case类的祖先中被重新定义时,并没有生成实现。 -
@Odomontois 我希望案例类能够正常工作,因为它们已经重新定义了
equals,而不必定义类似isEqual的东西。
标签: scala