1. 类型变量界定
scala中泛型使用中括弧[]来指定泛型的类型参数,如下所示:
class Stack[A] {
private var elements: List[A] = Nil
def push(x: A) { elements = x :: elements }
def peek: A = elements.head
def pop(): A = {
val currentTop = peek
elements = elements.tail
currentTop
}
}使用时需要在创建Stack对象时指定A的类型:
val stack = new Stack[Int]
stack.push(1)
stack.push(2)
println(stack.pop) // prints 2
println(stack.pop) // prints 12. 类型变量界定
scala使用如下变量界定符号:
<: 表示只限定子类,如 T <: A 表示T必须为A的子类
>: 表示只限定子类,如 T >: A 表示T必须为A的父类
表示:A和B为T上界
T <: A with B
表示:A和B为T下界
T >: A with B
表示:同时拥有上界和下界,并且A为下界,B为上界,A为B的子类,顺序不能颠倒。
T >: A <: B
表示:类型变量界定,即同时满足AT这种隐式值和BT这种隐式值
T:A:B
表示:视图界定,即同时能够满足隐式转换的A和隐式转换的B
T <% A <% B
def main(args: Array[String]): Unit = {
// A =:=B // 表示A类型等同于B类型
// A <:<B // 表示A类型是B类型的子类
def rocky[T](i: T)(implicit ev: T <:< java.io.Serializable) {
// 执行结果:Life is short ,you need spark!!!
println("Life is short ,you need spark!!!")
}
rocky("Spark")
}
本文探讨了Scala中的泛型及其类型约束。在Scala中,类型变量通过中括弧来定义,例如[T]。类型变量界定包括子类界定(如T <: A表示T是A的子类)和父类界定(如T >: A表示T是A的父类)。此外,还介绍了上下界界定,如T <: A with B表示T是A和B的子类,而T >: A <: B则同时设定了上界和下界。最后,提到了视图界定和类型变量的多重界定。
875

被折叠的 条评论
为什么被折叠?



