泛型类(或特质)将类型作为方括号内的参数 [...]
。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。
此页面的贡献者
内容
- 简介
- Scala 特性
- 为什么是 Scala 3?
- Scala 入门
- Hello, World!
- REPL
- 变量和数据类型
- 控制结构
- 领域建模
- 方法
- 一等函数
- 单例对象
- 集合
- 上下文抽象
- 顶级定义
- 总结
- 类型初探
- 字符串插值
- 控制结构
- 领域建模
- 工具
- OOP 建模
- FP 建模
- 方法
- 方法特性
- Scala 3 中的主方法
- 总结
- 函数
- 匿名函数
- 函数变量
- Eta 展开
- 高阶函数
- 编写自己的 map 方法
- 创建返回函数的方法
- 总结
- 打包和导入
- Scala 集合
- 集合类型
- 集合方法
- 总结
- 函数式编程
- 什么是函数式编程?
- 不可变值
- 纯函数
- 函数即值
- 函数式错误处理
- 总结
- 类型和类型系统
- 推断类型
- 泛型
- 交集类型
- 并集类型
- 代数数据类型
- 协变
- 不透明类型
- 结构化类型
- 依赖函数类型
- 其他类型
- 上下文抽象
- 扩展方法
- 上下文参数
- 上下文边界
- Given 导入
- 类型类
- 多重相等
- 隐式转换
- 总结
- 并发
- Scala 工具
- 使用 sbt 构建和测试 Scala 项目
- 工作表
- 与 Java 交互
- 面向 Java 开发者的 Scala
- 面向 JavaScript 开发者的 Scala
- 面向 Python 开发者的 Scala
- 下一步