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 1
2. 类型变量界定
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")
}