Scala Case類(lèi)只是常規(guī)類(lèi),默認(rèn)情況下是不可變的,可通過(guò)模式匹配可分解。
它使用相等(equal)方法在結(jié)構(gòu)上比較實(shí)例。它不使用new關(guān)鍵字實(shí)例化對(duì)象。
默認(rèn)情況下,case類(lèi)中列出的所有參數(shù)默認(rèn)使用public和immutable修辭符。
語(yǔ)法
case class className(parameters)
Scala Case類(lèi)示例
case class CaseClass(a:Int, b:Int)
object Demo{
def main(args:Array[String]){
var c = CaseClass(10,10) // Creating object of case class
println("a = "+c.a) // Accessing elements of case class
println("b = "+c.b)
}
}
將上面代碼保存到源文件:Demo.scala中,使用以下命令編譯并執(zhí)行代碼 -
D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo
a = 10
b = 10
Case類(lèi)支持模式匹配。 所以,可以在模式中使用它。以下是Case類(lèi)和模式的示例。
沒(méi)有參數(shù)的case類(lèi)將被聲明為case對(duì)象而不是case類(lèi)。 默認(rèn)情況下,case對(duì)象是可序列化的。
trait SuperTrait
case class CaseClass1(a:Int,b:Int) extends SuperTrait
case class CaseClass2(a:Int) extends SuperTrait // Case class
case object CaseObject extends SuperTrait // Case object
object Demo{
def main(args:Array[String]){
callCase(CaseClass1(10,10))
callCase(CaseClass2(10))
callCase(CaseObject)
}
def callCase(f:SuperTrait) = f match{
case CaseClass1(f,g)=>println("a = "+f+" b ="+g)
case CaseClass2(f)=>println("a = "+f)
case CaseObject=>println("No Argument")
}
}
將上面代碼保存到源文件:Demo.scala中,使用以下命令編譯并執(zhí)行代碼 -
D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo
a = 10 b =10
a = 10
No Argument