如果我将以下代码从class
更改为case class
,那么我就可以了。我不知道为什么
object Test {
trait T {
var l = {
println("l in T initialized")
"OK"
}
}
class MyClass(x: Int) extends T
def testTrait() = {
val t = MyClass(1)
}
}
答案 0 :(得分:4)
如果它不是案例类,则需要将其实例化为
val t = new MyClass(1)
即。称它为构造函数。
的原因在于它是一个案例类时,它声明它是一个案例类隐式定义了类的伴随中的new
方法宾语;即你免费获得这个:
apply
object MyClass {
def apply(x: Int): MyClass = {
new MyClass(x)
}
}
方法是scala中的语法糖,允许使用此简写符号apply
。
您还可以免费获得其他内容,例如MyClass(1)
方法,实现结构相等的unapply
方法和equals
方法。点击此处:http://docs.scala-lang.org/tutorials/tour/case-classes.html