Scala 重写AnyRef类中的equals方法不起作用
我试图看看equals方法是否可以在Car(AnyRef)类中过度编写。它不起作用。有人能指出equals方法的错误吗Scala 重写AnyRef类中的equals方法不起作用,scala,Scala,我试图看看equals方法是否可以在Car(AnyRef)类中过度编写。它不起作用。有人能指出equals方法的错误吗 class Car(name:String, price:Float) { override def equals(that:Any):Boolean = { val thatCar = that.asInstanceOf[Car] name == thatCar.name } } val aCar1 = new Car("Honda", 1000)
class Car(name:String, price:Float) {
override def equals(that:Any):Boolean = {
val thatCar = that.asInstanceOf[Car]
name == thatCar.name
}
}
val aCar1 = new Car("Honda", 1000)
val aCar2 = new Car("Honda", 1000)
aCar1==aCar2
我想这就是你想要的
class Car(val name:String, val price:Float){
override def equals(that:Any):Boolean = that match {
case x: Car => name == x.name
case _ => false
}
}
val aCar1 = new Car("Honda", 1000)
val aCar2 = new Car("Honda", 2100)
val aCar3 = new Car("Dodge", 3300)
aCar1==aCar2 // res0: Boolean = true
aCar1==aCar3 // res1: Boolean = false
aCar1=="Honda" // res2: Boolean = false
请注意,除非声明为
val
,否则无法访问Car.name
构造函数参数,否则它是实例的私有参数。@jwvh已经给出了一个很好的答案。只是想补充一下,您还可以使用案例类
:
case class Car(name: String, price: Float) {
override def equals(that: Any): Boolean = that match {
case x: Car => name == x.name
case _ => false
}
}
val car1 = Car("Honda", 8000)
val car2 = Car("Audi", 9000)
val car3 = Car("Honda", 7500)
car1 == car2 // false
car1 == car3 // true