如果我运行此代码(见下文),我将CaseClass作为打印消息.
case class CaseClass(var name: String) object Main extends App { val obj = CaseClass println(obj) }
但是这是什么意思?我的意思是CaseClass类似于Java的CaseClass.class?
解决方法
定义case类时,它实际上定义了一个类和一个对象,它们都具有相同的名称.当你说val obj = CaseClass时,你实际上是将对象,一个单例对象分配给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