Scala 3 — 书籍

泛型

语言

泛型类(或特质)将类型作为方括号内的参数 [...]。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

请参阅 Variance 部分,了解如何使用泛型类型表示 Variance。

此页面的贡献者