如果我运行此代码(见下文),我会将CaseClass
作为打印消息。
case class CaseClass(var name: String)
object Main extends App {
val obj = CaseClass
println(obj)
}
但它是什么意思?我的意思是CaseClass
类似于Java CaseClass.class
?
答案 0 :(得分:7)
定义case class
时,它实际上定义了class
和object
,两者都具有相同的名称。当您说val obj = CaseClass
时,您实际上是将object
(单个对象)分配给obj
。
有点像:
class NonCaseClass(var name: String) { // the actual class
override def toString = "the class version"
}
object NonCaseClass { // singleton companion object
override def toString = "the object version"
}
val obj = NonCaseClass // this assigns the companion object to a variable
println(obj)
// the object version
这与实例化类CaseClass
的实例不同:
val obj2 = new NonCaseClass("x")
println(obj2)
// the class version