黑猴子的家:Scala 多重界定

类型变量可以同时有上界和下界。写法为

T >: Lower <: Upper

不能同时有多个上界或下界,不过,我们依然可以要求一个类型实现多个特质,就像这样

T <: Comparable[T] with Serializable with Cloneable

可以有多个上下文界定

T : Ordering : ClassTag

变通的方式是使用复合类型
T <: A with B
T >: A with B
可以同时有上界和下界,如
T >: A <: B
这种情况下界必须写在前边,上界写在后边,位置不能反。同时A要符合B的子类型,A与B不能是两个无关的类型。
可以同时有多个view boundsc
T <% A //T这个类型是可以隐士转换成A类型,是可以没有继承关系的,隐式转换表示类是不在继承线上的,可以是不同类型,只需要使用隐式转换,转换一下就可以了,怎么转呢?两个类不是同一个类,也没有继承关系,就把原来的那个类拆开,把数据取出来,再创建另一个类型的对象,把取出来的数据塞进去,这就是隐式的类型转换
T <% A <% B
这种情况要求必须同时存在 T=>A的隐式转换,和T=>B的隐式转换。

class A{}
class B{}
implicit def string2A(s:String) = new A
implicit def string2B(s:String) = new B
def foo2[ T <% A <% B](x:T)  = println("foo2 OK")
foo2("test")

可以同时有多个上下文界定
T : A : B
这种情况要求必须同时存在C[T]类型的隐式值,和D[T]类型的隐式值

class C[T];
class D[T];
implicit val c = new C[Int]
implicit val d = new D[Int]
def foo3[ T : C : D ](i:T) = println("foo3 OK")
foo3(2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值