繁体   English   中英

Scala:覆盖基本类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM