泛型類別(或特質)將型別作為方括號 [...]
中的參數。Scala 慣例是用單一字母(例如 A
)來命名這些型別參數。然後,型別可以在類別中使用,視需要用於方法實例參數或回傳型別
// here we declare the type parameter A
// v
class Stack[A] {
private var elements: List[A] = Nil
// ^
// Here we refer to the type parameter
// v
def push(x: A): Unit =
elements = elements.prepended(x)
def peek: A = elements.head
def pop(): A = {
val currentTop = peek
elements = elements.tail
currentTop
}
}
// here we declare the type parameter A
// v
class Stack[A]:
private var elements: List[A] = Nil
// ^
// Here we refer to the type parameter
// v
def push(x: A): Unit =
elements = elements.prepended(x)
def peek: A = elements.head
def pop(): A =
val currentTop = peek
elements = elements.tail
currentTop
這個 Stack
類別的實作會將任何類型作為參數。泛型的優點是,現在你可以建立 Stack[Int]
、Stack[String]
等,讓你能夠重複使用 Stack
的實作,以用於任意元素類型。
以下是如何建立和使用 Stack[Int]
val stack = new Stack[Int]
stack.push(1)
stack.push(2)
println(stack.pop()) // prints 2
println(stack.pop()) // prints 1
val stack = Stack[Int]
stack.push(1)
stack.push(2)
println(stack.pop()) // prints 2
println(stack.pop()) // prints 1
請參閱 變異區段,以了解如何使用泛型類型表達變異。
此頁面的貢獻者
內容
- 簡介
- Scala 特色
- 為何選擇 Scala 3?
- Scala 淺嚐
- Hello, World!
- REPL
- 變數和資料類型
- 控制結構
- 網域建模
- 方法
- 一級函數
- 單例物件
- 集合
- 情境抽象
- 頂層定義
- 摘要
- 初探類型
- 字串內插
- 控制結構
- 網域建模
- 工具
- OOP 建模
- FP 建模
- 方法
- 方法特色
- Scala 3 中的主要方法
- 摘要
- 函數
- 匿名函數
- 函數變數
- Eta 擴充
- 高階函數
- 撰寫自己的 map 方法
- 建立會傳回函數的方法
- 摘要
- 封裝和匯入
- Scala 集合
- 集合類型
- 集合方法
- 摘要
- 函數式程式設計
- 什麼是函數式程式設計?
- 不變值
- 純函數
- 函數是值
- 函數式錯誤處理
- 摘要
- 類型和類型系統
- 推論型別
- 泛型
- 交集型別
- 聯集型別
- 代數資料型別
- 變異性
- 不透明型別
- 結構型別
- 相依函數型別
- 其他型別
- 情境抽象
- 擴充方法
- 內容參數
- 內容界限
- 已給予的匯入
- 型別類別
- 多重宇宙等式
- 隱式轉換
- 摘要
- 並行處理
- Scala 工具
- 使用 sbt 建置和測試 Scala 專案
- 工作表
- 與 Java 互動
- Java 開發人員的 Scala
- JavaScript 開發人員的 Scala
- Python 開發人員的 Scala
- 下一步