我已经定义了一个包装类:
class Wrapper[T](private val value: T)
我想确保w(v1)== v2和v2 == w(v1)iff v1 == v2。第一部分很简单,因为你可以覆盖Wrapper类的equals方法。但问题是另一种方式,例如5 == Wrapper(5)返回true,实现了相等的对称性。在scala中你可以覆盖equals基本类型的方法,比如Int或String吗?在C ++中,您可以覆盖operator ==(A,int)和operator ==(int,A),但对于java或scala,它似乎不是这样。
答案 0 :(得分:2)
如何用implicits完成(请注意,此处不能使用==
和equals
):
import scala.reflect.ClassTag
implicit class Wrapper[T : ClassTag](val value: T) {
def isEqual(other: Any) = other match {
case x: T =>
x == value
case x: Wrapper[T] =>
x.value == value
case _ =>
false
}
}
5 isEqual (new Wrapper(5)) // true
(new Wrapper(5)) isEqual 5 // true