樣例類可以讓 Scala 編譯器自動為類添加一些便捷設定,可以使用樣例類來替換伴生,減少代碼量。
```scala
case class Student(name:String, age:Int) //定義樣例類
val stu=Student("Jason",19) // 創建樣例類的實例,無需 new 關鍵字
println(stu.name) //訪問對象屬性
```
* 樣例類構造參數默認聲明為`val`,自動實現類構造參數的getter方法;
* 樣例類構造參數聲明為`var`時,自動實現類構造參數的setter和getter方法;
* 樣例類自動創建伴生對象;
* 樣例類自動實現的其他方法 toString()、equals()、copy()、hashCode()、apply()、unapply();
<br/>
**1. 定義&調用樣例類**
```scala
// 樣例類
case class Student(var name:String, var age:Int)
object App {
def main(args: Array[String]): Unit = {
// 因為樣例類自動創建伴生對象,所以可以不用new
val stu = Student("Tom", 20)
println(stu.name) // Tom
Student.name // 編譯報錯
}
}
```
<br/>
**2. `case class`與`class`的區別:**
* 樣例類通常用于描述不可變的數據,數據完全依賴構造參數。如果一個對象在內部執行有狀態計算,或者表現出其他類型的復雜行為,那么它應該是一個普通類。
* 樣例類默認可用伴生對象方式創建實例,普通類需要定義 apply()。
* 樣例類默認不可變,通過模式匹配可分解
* 兩個樣例類`==`操作時,通過按值比較而不是按引用
* 樣例類默認支持模式匹配,普通類需要定義 unapply(),該方法將在后面的模式匹配中用到。
總的來說,樣例類本質還是方便我們創建、操作的普通類而已,可以說編譯器以極小的轉換為我們帶來了極大的便利,代價便是使用 case 修飾符以及類和對象會變得稍微大一些。變大的原因是產生了附加的方法以及對每個構造器參數添加了隱含的前綴,不過樣例類最大的好處還是支持模式匹配。
- Scala是什么?
- Scala特性
- 開發環境搭建
- 環境搭建
- windows下的環境搭建
- IntelliJ IDEA環境搭建
- Scala關鍵字
- Hello, World
- 數據類型
- 數據類型
- 數據類型層次結構
- 字面量
- Null類型
- Nothing類型
- Unit類型
- 變量與常量
- type定義類型別名
- 字符串插值器
- 條件控制
- 循環控制
- 數組
- 元組
- 集合
- 集合分類
- List常用操作
- Set常用操作
- Map常用操作
- 函數
- 函數聲明與調用
- 函數與方法的區別
- 函數注意事項
- 匿名函數
- 可變參數
- 高階函數
- 中置表達式
- 函數嵌套
- 函數科里化
- 隱式參數
- 隱式函數
- 閉包
- 類和對象
- Java與Scala的比較
- 有關類與對象概念
- 類
- 類的定義和調用
- 類的繼承
- 抽象類
- 單例對象
- 伴生對象和伴生類
- 特質
- 定義特質
- 混入特質
- 抽象類與特質的選擇
- 自身類型
- 依賴注入
- this別名
- 樣例類
- 枚舉類
- 泛型類
- 包與包對象
- 模式匹配
- 基本語法
- 匹配模式
- 偏函數
- 注解
- 運算符
- 正則表達式
- 隱式類
- 異常處理
- 高級類型
- 結構類型
- 復合類型