为什么“case类”并不需要“新”来创建一个新的对象(Why “case class” doesn&

2019-06-26 17:28发布

在斯卡拉的是,你不需要用“新”创建一个新的“案件类别”的原因是什么? 我想没有答案一段时间,现在搜索。

Answer 1:

难道要如何为何 ? 由于对方的回答票据,该怎么仅仅是apply自动产生的配对对象上的方法。

对于为什么 :case类往往用来实现代数数据类型在Scala中,而new稀少构造函数允许代码是更优雅(创造价值看起来更像是通过模式匹配解构它,例如),而更接近于ADT语法等语言。



Answer 2:

案例类与预建的同伴对象apply()来实现。 甚至有人抱怨这一点: 在一个案例类的同伴如何重写申请 :)



Answer 3:

案例类为您提供自动生成的 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) 它不是一个构造函数 ,这个调用应用方法的方法。

请阅读斯卡拉对象申请-功能的更多信息。



文章来源: Why “case class” doesn't need “new” to create a new object
标签: class scala case