2017-03-18 66 views
-1

我试图查看是否可以在Car(AnyRef)类中覆盖equals方法。它不工作。有人能指出什么是平等方法的错误吗?重写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) 
val aCar2 = new Car("Honda", 1000) 
aCar1==aCar2 

回答

1

我认为这是你想要的。

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构造函数的参数,否则它是私有的实例。

0

@jwvh已经给出了很好的答案。只是想补充一点,您还可以使用case class

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