[英]scala: overriding equals of basic types
我定义了一个包装器类:
class Wrapper[T](private val value: T)
我想确保w(v1)== v2和v2 == w(v1)iff v1 == v2。 第一部分很容易,因为您可以覆盖Wrapper类的equals方法。 但是问题是相反的,例如使5 == Wrapper(5)返回true,从而实现相等的对称性。 在scala中,您是否有可能可以覆盖Int或String之类的基本类型的equals方法? 在C ++中,您可以覆盖operator ==(A,int)和operator ==(int,A),但是对于Java或scala来说似乎并非如此。
如何使用隐式方法完成此操作(请注意,此处不能使用==
或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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.