我使用规范映射(在scala中)实现了一个set wrapper。现在,当重新定义equals(和hashCode)时,我希望包含我的set wrapper的集合使用引用相等,即“eq”。但是,我用于规范地图的集合应该使用真正的“等于”。我想出了以下解决方案:
override def equals(obj: Any) =
obj match {
case o: SetWrapper => (o eq this) || o.set == this.set
case _ => false
}
我的问题是,我真的需要这个吗?
(o eq this) || o.set == this.set
还是足以使用它?
override def equals(obj: Any) =
obj match {
case o: SetWrapper => o.set == this.set
case _ => false
}
我猜这个库在调用equals之前自动执行“eq”(当使用==时),但我不确定。
答案 0 :(得分:2)
==
调用equals
,正确处理null
值。如果您想进行优化,则必须自己致电eq
。