スカラのケースクラスのhashCodeは、そのフィールドによってのみ決定されていたという印象を受けました。その結果、hashCodeをキャッシュすることは、不変のケースクラスに対して安全であると考えました。私は間違っているようキャッシュされたhashCodeを持つスカラケースクラス
は思え:
case class Foo(s: String) {
override val hashCode: Int = super.hashCode()
}
val f1 = Foo("foo")
val f2 = Foo("foo")
println(f1.hashCode == f2.hashCode) // FALSE
誰もが、ここにしてください何が起こっているのかを説明してもらえますか?
補遺 - ただ、比較のために:ケースクラスのインスタンスの
case class Bar(s: String)
val b1 = Bar("bar")
val b2 = Bar("bar")
println(b1.hashCode == b2.hashCode) // TRUE
はい、これは良い解決策です:パブリックAPIに基づいた実装でオーバーライドされていない場合と同じ動作(フィールドのみに基づいたハッシュ)、まだメモされている - ありがとう! – netzwerg