我有一个案例类(让我们命名它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()
,都可以工作。我是否错过了任何会标记我正在做的坏事 (TM)的事情?
scala> a == b
res0: Boolean = true
scala> a.equals(b)
res1: Boolean = true
scala> a.hashCode == b.hashCode
res2: Boolean = true