Stuff
私は、トレイトを拡張することによって実行時に匿名のサブクラスを作成できるようにしたいケースクラス(名前を付けましょう)を持っています(それを呼び出しますMarker
)。これは、私がやろうとしていることを示す REPL セッションのスニペットです。
scala> trait Marker
defined trait Marker
scala> case class Stuff(i: Int)
defined class Stuff
scala> val a = Stuff(1)
a: Stuff = Stuff(1)
scala> val b = new Stuff(1) with Marker
b: Stuff with Marker = Stuff(1)
a
を使用してインスタンス化する方法に注意してくださいStuff.apply()
。一方、b
の場合は、ケース クラスのコンストラクターを呼び出しています。
私の質問は、コンストラクタコーシャを使用してケースクラスをインスタンス化していますか? ==
、.equals()
、、 などのケース クラスによって提供される通常の利便性はすべて機能するため、そのように思われます.hashCode()
。私がやっていることをBad Thing (TM)としてブランド化する何かが欠けていますか?
scala> a == b
res0: Boolean = true
scala> a.equals(b)
res1: Boolean = true
scala> a.hashCode == b.hashCode
res2: Boolean = true