您的位置:首页 > 编程语言

47.Scala多重界定代码实战及其在Spark中的应用源码解析

2017-09-24 18:24 239 查看
一个类型变量可同时拥有上界和下界,但是一个类型变量不可同时拥有多个上界或者下界

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐