我有一个案例类(让我们命名它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