在案例类中,如果有可选属性,我们可以重写hashCode和equals方法来包含这些可选属性。
下面是一个示例代码:
case class Person(name: String, age: Int, address: Option[String])
object Person {
def main(args: Array[String]): Unit = {
val person1 = Person("Alice", 25, Some("123 Main St"))
val person2 = Person("Bob", 30, Some("456 Elm St"))
val person3 = Person("Alice", 25, None)
println(person1.hashCode()) // Output: 154515074
println(person2.hashCode()) // Output: 11399185
println(person3.hashCode()) // Output: 154515074
println(person1.equals(person2)) // Output: false
println(person1.equals(person3)) // Output: true
println(person2.equals(person3)) // Output: false
}
}
在上述示例中,我们定义了一个Person案例类,其中包含了一个可选的address属性。在hashCode方法中,我们通过使用name和age属性的hashCode来计算hashCode值。如果address属性存在,我们还将其hashCode值与前面的结果进行异或运算。这样做的目的是确保如果address属性不同,那么hashCode值也会不同。
在equals方法中,我们首先判断是否为同一个对象,然后判断是否为Person类型的实例,接着比较name和age属性是否相等。最后,我们使用Option的equals方法来比较address属性是否相等。
上一篇:案例类 - 使用转换复制多个字段