首页 > 解决方案 > scala中的案例类如何在内部工作

问题描述

我有 1 个关于 scala 案例类的问题

scala> case class Person(name:String, age:Int)

scala> val person1 = Person("Posa",30)

scala> val person2 = new Person("Posa",30)

两个对象(person1 和 person2)在什么方面有所不同?

new 关键字在这里有什么不同?

标签: scala

解决方案


创建案例类时

case class Person(name: String, age: Int)

编译器自动创建一个具有工厂apply方法的伴生对象

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

new不使用时调用,所以

val person1 = Person("Posa", 30) // function call creation syntax via companion's apply method

相当于

val person1 = Person.apply("Posa", 30)

另一方面,实例创建表达式Person是对类(不是它的伴随对象)的构造函数调用

val person2 = new Person("Posa", 30) // invokes constructor

注意启动 Scala 3,即使是常规类也可以使用函数调用创建语法进行实例化

Scala 案例类生成应用方法,因此可以使用简单的函数应用程序创建案例类的值,而无需编写新的。Scala 3 将此方案推广到所有具体类。


推荐阅读