zoukankan      html  css  js  c++  java
  • scala之旅-核心语言特性【case class】(十三)

    Case 类和一般的类类似,但是有些细小的区别,后面会讲。case 类对不可变数据建模非常友好。在后面的介绍中,我们将会在模式匹配中展示其优越性

    定义一个Case类

    一个最小的case类需要关键字 case class,一个标志符和一个参数列表(参数列表可以为空)

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

    注意,实例化case类Book时是不需要new关键字的。这是因为case类默认会有一个apply方法,这个方法会负责对象构造。

    当你创建一个有参数的case类时,这些参数都是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)  // prints guillaume@quebec.ca
    message1.sender = "travis@washington.us"  // this line does not compile

    你无法对 message1.sender 重新赋值。因为这个变量是一个val 值(val 值是不可变的). var 在case类的也是可以用的,但是不推荐使用。

    对象比较

    case类的实例是通过结构比较而不是通过引用:

    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  // true

    尽管message2和message3指向不同的对象,但是对象的每个值是相等的。

    对象复制

    你可以用copy方法实现从一个case类实例进行复制一个(浅)副本出来。你也可以有选择地修改构造器的实参

    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  // travis@washington.us
    message5.recipient // claire@bourgogne.fr
    message5.body  // "Me zo o komz gant ma amezeg"

    message5的sender是用的message4的recipient值,但是message4的body是直接复制过去的。

  • 相关阅读:
    20155229 2016-2017-2 《Java程序设计》第九周学习总结
    20155229实验二 《Java面向对象程序设计》实验报告
    10.11课后练习——MyOD系统调用版本
    2017-2018-1 20155223 《信息安全系统设计基础》第5周学习总结
    课堂实践及课后练习9.27@20155223
    2017-2018-1 20155223 《信息安全系统设计基础》第3周学习总结
    20155223 2016-2017-2《Java程序设计》课程总结
    Java第五次实验报告
    课堂代码练习补交
    第四次实验报告
  • 原文地址:https://www.cnblogs.com/zhouwenyang/p/13889773.html
Copyright © 2011-2022 走看看