Scala Case類和對象

Scala Case類只是常規類,默認情況下是不可變的,可通過模式匹配可分解。

它使用相等(equal)方法在結構上比較實例。它不使用new關鍵字實例化對象。

默認情況下,case類中列出的所有參數默認使用publicimmutable修辭符。

語法

case class className(parameters)

Scala Case類示例

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中,使用以下命令編譯並執行代碼 -

D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo
a = 10
b = 10

Case類支持模式匹配。 所以,可以在模式中使用它。以下是Case類和模式的示例。

Scala Case類和模式匹配示例

沒有參數的case類將被聲明為case對象而不是case類。 默認情況下,case對象是可序列化的。

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中,使用以下命令編譯並執行代碼 -

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

上一篇: Scala單例和伴生對象 下一篇: Scala構造函數