scala案例类怎么定义

这篇文章主要讲解了“scala案例类怎么定义”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“scala案例类怎么定义”吧!

定义一个案例类

一个最简单的案例类定义由关键字case class,类名,参数列表(可为空)组成:

case class Book(isbn: String)
val frankenstein = Book("978-0486282114")

注意在实例化案例类Book时,并没有使用关键字new,这是因为案例类有一个默认的apply方法来负责对象的创建。

当你创建包含参数的案例类时,这些参数是公开(public)的val

case class Message(sender: String, recipient: String, body: String)val message1 = Message("guillaume@quebec.ca", "jorge@catalonia.es", "Ça va ?")
println(message1.sender)  message1.sender = "travis@washington.us"

你不能给message1.sender重新赋值,因为它是一个val(不可变)。在案例类中使用var也是可以的,但并不推荐这样。

比较

案例类在比较的时候是按值比较而非按引用比较:

case class Message(sender: String, recipient: String, body: String)
val message2 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?")val message3 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?")val messagesAreTheSame = message2 == message3

尽管message2message3引用不同的对象,但是他们的值是相等的,所以message2 == message3true

拷贝

你可以通过copy方法创建一个案例类实例的浅拷贝,同时可以指定构造参数来做一些改变。

case class Message(sender: String, recipient: String, body: String)val message4 = Message("julien@bretagne.fr", "travis@washington.us", "Me zo o komz gant ma amezeg")val message5 = message4.copy(sender = message4.recipient, recipient = "claire@bourgogne.fr")message5.sender  message5.recipient message5.body

上述代码指定message4recipient作为message5sender,指定message5recipient为”claire@bourgogne.fr”,而message4body则是直接拷贝作为message5body了。

感谢各位的阅读,以上就是“scala案例类怎么定义”的内容了,经过本文的学习后,相信大家对scala案例类怎么定义这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!