美文网首页
Java & Groovy & Scala & Kotlin -

Java & Groovy & Scala & Kotlin -

作者: bookislife | 来源:发表于2017-08-06 11:02 被阅读0次

    Overview

    • 样本类是 Scala 中使用关键字 case class 声明的类。它可以隐式调用构造方法进行初始化,样本类没有副构造方法。
    • 样本类默认基于构造方法实现了 toString(), equals()hashCode() 方法,不在构造方法中定义的属性不会产生在 toString() 的结果中。
    • 样本类可以直接使用 == 进行比较,同样不在构造方法中定义的属性不会用在比较上
    • 样本类被大量使用在模式匹配中

    定义样本类

    case class Number(n: Int) {
      var comment: String = "Default Comment"
      def eval: Int = n
    }
    
    case class Sum(n1: Number, n2: Number) {
      var comment: String = "Default Comment"
      def eval: Int = n1.eval + n2.eval
    }
    

    以上定义了两个样本类,其中样本类 Sum 用于计算两个样本类 Number 的和。

    使用样本类

    样本类在初始化时可以隐式调用构造方法,所以无需使用 new 关键字。

    val n = Number(1)
    

    样本类默认实现了 toString() 方法,该方法覆盖了构造方法中的所有参数,而类中定义的变量不会被写到 toString() 方法中

    println(n.toString)
    

    样本类默认实现了 equals() 方法,该方法覆盖了构造方法中的所有参数,而类中定义的变量不会被写到 equals() 方法中

    val result1 = Sum(Number(10), Number(20))
    result1.comment = "result1"
    val result2 = Sum(Number(10), Number(20))
    result2.comment = "result2"
    println(result1 == result2) //  true
    

    文章源码见 https://github.com/SidneyXu/JGSK 仓库的 scala/_18_case_class 小节

    相关文章

      网友评论

          本文标题:Java & Groovy & Scala & Kotlin -

          本文链接:https://www.haomeiwen.com/subject/jtsglxtx.html