一个类型变量可同时拥有上界和下界,但是一个类型变量不可同时拥有多个上界或者下界
T <: A with B //T是A或者B的子类
T >: A with B //A或者B就是T的子类
T>: A <: B //T同时有上界、下界。 A是T的下界,B是T的上界。A是B的子类型,A和B是类型相关的。 下界必须写在前面,上界必须写在后面。
T : A : B //上下文界定,需要同时满足。T必须同时满足存在A[T]这种类型的隐式值和B[T]这种类型的隐式值
T <% A <% B //T可以有多个视图界定,T可隐式转换成A或者B,要同时满足。T既可隐式转换成A,也可隐式转换成B
class M_A[T]
class M_B[T]
object Multiple_Bounds_47 {
def main(args: Array[String]): Unit = {
//a和b 隐式表达式会被Scala编译器隐式地使用
implicit val a = new M_A[Int]
implicit val b = new M_B[Int]
def foo[T : M_A : M_B](i : T) = println("ok") //T必须同时既是M_A[T]类型的,又是M_B[T]类型的
foo(2)
}
}
输出:
ok