2016-03-02 91 views
0

我需要爲少數案例類定製相等的方法。經過一些在線搜索,我沒有看到任何明確的解決方案。我應該寫我自己的平等檢查方法嗎?覆蓋Scala中的等於

+0

我勸你慎重地考慮您的設計 - 如果你需要定製平等然後'情況class'很少是合適的。如果你只是想公開訪問這些字段,你可以使用'val'或者'var'聲明:'class MyClass(val x:Int,val y:String,...)'來實現。 – lmm

回答

2

是。您需要定義自己的equals方法:

case class Person(...) { 

    override def equals(other: Any): Boolean = { 
     ... 
    } 

    override def hashCode: Int = { 
     ... 
    } 
} 

equals方法看起來很容易,但它也可能是把戲。我強烈建議您閱讀Scala Cookbook的以下章節,瞭解如何在Artima:How to Write an Equality Method in JavaDefine an equals Method (Object Equality)和這篇文章。

+0

感謝您的輸入。我的問題是關於案例類。對我的在線搜索來說,它和課堂不一樣。編譯器生成case類中的「==」。 – TeeKai

+0

是的。編譯器生成它們**如果你不**。但是,如果你這樣做,就像答案所示,編譯器不會生成它。 – marcospereira