在Scala中,您不需要使用"new"来创建新的"案例类"是什么原因?我现在试着寻找一段时间没有答案.
案例类为您的伴随对象提供了自动生成的 apply函数,您可以像构造函数一样使用它。
在Scala反编译的字节码中,您会发现apply创建的函数如下:
object Person {
def apply(name: String, age: Integer): Person = new Person(name,age)
}
Run Code Online (Sandbox Code Playgroud)
范例:
case class Person(name: String, age: Integer)
Run Code Online (Sandbox Code Playgroud)
以下三个都做相同的事情。
val p0 = new Person("Frank", 23) // normal constructor
val p1 = Person("Frank", 23) // this uses apply
val p2 = Person.apply("Frank", 23) // using apply manually
Run Code Online (Sandbox Code Playgroud)
因此,如果使用val p1 = Person("Frank", 23) 的不是构造函数,则此方法称为apply方法。
请阅读scala-object-apply-functions获取更多信息。