2017-03-18 13 views
-1

私は、equalsメソッドが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 
関連する問題