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


一个类型变量可同时拥有上界和下界,但是一个类型变量不可同时拥有多个上界或者下界

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值