scala泛型
Scala 泛型:类型安全与灵活性的平衡
泛型是 Scala 中实现类型抽象的核心机制,它允许在定义类、特质、方法时使用类型参数,从而编写与具体类型无关的通用代码。Scala 泛型不仅支持类似 Java 的上下界约束,还引入了协变、逆变等独特特性,进一步增强了类型系统的灵活性。本文将全面解析 Scala 泛型的用法与高级特性。
泛型基础:类型参数的定义与使用
Scala 泛型使用方括号 [] 定义类型参数,可用于类、特质、方法等,实现代码的复用与类型安全。
泛型类
在类定义中声明类型参数,使类能处理多种类型的数据:
// 定义泛型类 Box,类型参数为 T
class Box[T](val content: T) {
// 方法返回值使用类型参数 T
def getContent: T = content
}
// 创建不同类型的 Box 实例
val intBox = new Box[Int](10)
val strBox = new Box[String]("hello")
println(intBox.getContent) // 输出:10(类型为 Int)
println(strBox.getContent) // 输出:hello(类型为 String)
泛型方法
在方法中声明类型参数,使方法能独立于类的类型参数处理不同类型:
object GenericUtils {
// 泛型方法:交换数组中两个位置的元素
def swap[T](array: Array[T], i: Int, j: Int): Unit = {
val temp = array(i)
array(i) = array(j)
array(j) = temp
}
}
// 测试泛型方法
val intArray = Array(1, 2, 3)
GenericUtils.swap(intArray, 0, 2)
println(intArray.mkString(",")) // 输出:3,2,1
val strArray = Array("a", "b", "c")
GenericUtils.swap(strArray, 1, 2)
println(strArray.mkString(",")) // 输出:a,c,b