scala:覆盖基本类型的等于

时间:2016-09-04 01:09:12

标签: java scala equals equality

我已经定义了一个包装类:

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,它似乎不是这样。

1 个答案:

答案 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