Scala:它是一个类实例吗?

时间:2015-03-12 23:59:35

标签: scala

如果我运行此代码(见下文),我会将CaseClass作为打印消息。

case class CaseClass(var name: String)

object Main extends App {
  val obj = CaseClass
  println(obj)
}

但它是什么意思?我的意思是CaseClass类似于Java CaseClass.class

1 个答案:

答案 0 :(得分:7)

定义case class时,它实际上定义了classobject,两者都具有相同的名称。当您说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