首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制一个特征的所有实现覆盖等于

强制一个特征的所有实现覆盖等于
EN

Stack Overflow用户
提问于 2015-04-19 14:30:14
回答 1查看 231关注 0票数 10

我有一个特性,我知道引用相等永远不是equals的正确实现。该特性的实现可以由许多用户编写,实践表明,有时他们无法覆盖equals。有什么办法来要求吗?

在实践中,实现通常是case类,它会自动覆盖equals,我们可以通过将Product作为特征的自我类型来实现这一要求,但是,我希望看到一种允许非案例类覆盖equals的解决方案(编辑:使用scala.Equals作为自类型更接近于我想要的,因为它仍然由案例类自动实现,但可以由非案例类有效地实现,而不是对编写实现的人造成很大负担)。

在编写这个问题时,我还想到了另一种方法,就是重写特征中的equals来调用抽象方法,但不幸的是,这并不适用于case类实现。

EN

回答 1

Stack Overflow用户

发布于 2015-04-20 14:31:10

为什么不使用类型契约而不是纯特性呢?我们已经有一个了 in scalaz,很容易将它与Equals特性结合起来:

代码语言:javascript
复制
import scalaz._

case class X(a:Int,b:Int)

class Y(a:Int,b:Int)

implicit def provideDefaultEqual[T <: Equals]:Equal[T] = new Equal[T] {
  def equal(a1: T, a2: T) = a1 == a2
}

implicitly[Equal[X]]

implicitly[Equal[Y]] //compile error

如果你需要把它和你的特质连接起来,有你自己的好办法

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29731199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档