当前位置:  开发笔记 > 编程语言 > 正文

斯卡拉:我的"等于"方法是否正确?

如何解决《斯卡拉:我的"等于"方法是否正确?》经验,为你挑选了1个好方法。

equals为课写了一个方法A.

class A(x: Int, s: String) {
  override def equals(that: Any) = that match {
    case a: A => this.x == a.x && this.s == a.s
    case _    => false
  } 
}

这是对的吗?



1> 0__..:

对,那是正确的.但是,您还应该重写hashCode方法以反映相等性.也就是说,如果你有两个实例a,并b在那里a == b,你应该确保a.hashCode == b.hashCode.

实现这两者的最简单方法是使用case-class:

case class A(private val x: Int, private val s: String)

这给你正确equalshashCode"免费".


如果你计划有子类的可能性A,你可以看看Odersky的想法canEqual(也在这里).

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有