我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 } }
这是对的吗?
对,那是正确的.但是,您还应该重写hashCode
方法以反映相等性.也就是说,如果你有两个实例a
,并b
在那里a == b
,你应该确保a.hashCode == b.hashCode
.
实现这两者的最简单方法是使用case-class:
case class A(private val x: Int, private val s: String)
这给你正确equals
和hashCode
"免费".
如果你计划有子类的可能性A
,你可以看看Odersky的想法canEqual
(也在这里).