什么是Scala中的案例类

126 阅读2分钟

Case Classes Image

scala中的案例类是带有一些额外配料的常规类。让我们来讨论一下为什么它们的需求量很大。

一个没有参数的case类被声明为case对象,而不是case类。默认情况下,case对象可以被序列化。Case对象也像一个对象,它比普通的Object有更多的属性,Scala中的Case类是可以使用模式匹配进行分解的类。所以在结构上使用equal方法对实例进行比较。

此外,Scala的case类与普通的类类似,只是它们对于建模不可变的数据和模式匹配很有用。

之后,默认情况下,case类有公共和不可变的参数。此外,这些支持模式匹配,使得编写逻辑代码更加容易。

Scala case类的一些特点如下。

  • case类的参数是字段
  • Scala会自动生成equals()、hashcode()和toString()等方法作为case类的一部分。
  • case类有一个copy方法,用来复制参数,并可以覆盖它们。
  • 一个实例可以是 创建时不使用'新的'关键字创建的。
  • 生成一个默认的toString 方法,这对调试很有帮助。

->有了apply ,你就不需要new ,并将参数作为一个字段使用

case class CaseClassDemo(name: String) {
  // Using constructor parameter as field
  println(s"Hello, I am $name, How are you ?")
}
 case object CaseClassDemo extends App {
   val Rohan = CaseClassDemo("Rohan")
 }

Output : Hello, I am Rohan, How are you ?

-> 复制方法和相等方法

object CaseClassDemo extends App {
  case class Fruits(name: String)
    val firstFruit = Fruits("Orange")
    val secondFruit = firstFruit.copy()
    println(secondFruit.name)
    println(firstFruit == secondFruit)
}

Output : Orange
         true

->toString

object CaseClassDemo extends App {
  case class Fruits(name: String, age: Int)
    val fruit = Fruits("Orange", 15)
    val ageOfFruitInString = fruit.age.toString
    println("length of converted age is : " + ageOfFruitInString.length)
}

Output : length of converted age is : 2

case class Implementation

总结

首先,感谢你们能坚持到博客的最后,我希望你们能获得一些知识,了解我们如何在Scala中创建一个case类。然后,我们了解了case类的一些重要功能。

参考资料

更多细节请访问官方文档,链接:https://docs.scala-lang.org/