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
总结
首先,感谢你们能坚持到博客的最后,我希望你们能获得一些知识,了解我们如何在Scala中创建一个case类。然后,我们了解了case类的一些重要功能。
参考资料
更多细节请访问官方文档,链接:https://docs.scala-lang.org/