如何创建一个scala类实现==?

时间:2015-02-10 16:20:48

标签: scala

我有一个非案例类,我试图测试是否平等。它有> 22个字段,所以我不能在Scala 2.10.x中使用案例类:

class Row(
                 val date: String,
                 val time: String,
                 val orderId: String,
                 val id: String) extends Serializable {

  override def toString: String = {
    ToStringBuilder.reflectionToString(this);
  }
}

我实现==或等于函数的最简单方法是什么,以便我可以测试row1 == row2

3 个答案:

答案 0 :(得分:0)

在您的示例中,Row不是案例类。它是一个标准类,因此以标准Java方式检查是否相等。

试试这个:

case class Row(date: String,
               time: String,
               orderId: String,
               id: String)

答案 1 :(得分:0)

您别无选择,只能实施自己的equals因此hashcode方法(不容易),因为您无法实现case类。本文应该对您有所帮助:object equality。这些是您需要牢记的因素:

  1. 注意equals方法
  2. 的类型签名
  3. 覆盖hashCode()
  4. 避免依赖于可变状态
  5. 如果类为canEqual
  6. ,则应实施并使用non-final方法

答案 2 :(得分:0)

另一种选择(尽管由于Row不是一个案例类,仍然需要编写逐字段比较代码),因此将提供Scalaz Equal类型类的实例。这具有类型安全的优点。有关更多信息,请查看Learning Scalaz series。 ("类型类102"部分有一个为类型提供Equal实例的例子。)