class - 为什么 "case class"不需要 "new"来创建新对象

标签 class scala case

在 Scala 中,您不需要使用“new”来创建新的“案例类”的原因是什么?
我现在尝试搜索了一段时间没有答案。

最佳答案

案例课为您提供自动生成 apply在他们的伴生对象上运行,您可以像构造函数一样使用它。

斯卡拉 你会发现反编译的字节码apply函数创建如下:

object Person {
def apply(name: String, age: Integer): Person = new Person(name,age)
}

示例:
case class Person(name: String, age: Integer)

以下三个都做同样的事情。
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

所以如果你使用 val p1 = Person("Frank", 23) 它不是构造函数 ,这是一个调用apply方法的方法。

请阅读scala-object-apply-functions了解更多信息。

关于class - 为什么 "case class"不需要 "new"来创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11777199/

相关文章:

python - 将变量传递给另一个类python

sql - slick+play 上带有 'HAVING' 子句的 Group By

python - 如何调用类本身的类对象?

html - 我的 CSS 不响应 ID 和类标识符

java - 为什么 Scala 从对象的 main 方法而不是类的静态 main 方法开始?

Scala 检查一个 Eithers 序列

mysql - 在 GROUP BY 级别上使用 "CASE"命令

mysql - 带有 COUNT 或 SUM 问题的 SQL CASE

SQL:在已分组的表上使用 CASE

c++ - 无法创建类实例