scala类型系统:11) upper bounds & lower bounds

Upper Bounds

在Java泛型里表示某个类型是Test类型的子类型,使用extends关键字:

<T extends Test>

//或用通配符的形式:
<? extends Test>

这种形式也叫upper bounds(中文为上限或上界),同样的意思在scala的写法为:

[T <: Test]

//或用通配符:
[_ <: Test]

upper bounds适用于把泛型对象当作数据的提供者(生产者)的场景下:

scala>  def pr(list : List[_ <: Any]) { 
            list.foreach(print) 
        }
Lower Bounds

在Java泛型里表示某个类型是Test类型的父类型,使用super关键字:

<T super Test>

//或用通配符的形式:
<? super Test>

这种形式也叫lower bounds(中文为下限或下界),同样的意思在scala的写法为:

[T >: Test]

//或用通配符:
[_ >: Test]

lower bound适用于把泛型对象当作数据的消费者的场景下:

scala>  def append[T >: String] (buf : ListBuffer[T])  = {  
                buf.append( "hi")
        }

基本上与java一致,不过在复杂一点的情况下,对多重界定,有一些差异:

Java里,T 同时是 A 和 B 的子类型,称为multiple bounds

<T extends A & B>

Scala里对上界和下界不能有多个,不过变通的做法是使用复合类型(compund type):

[T <: A with B]

而对于lower bounds,在java里则不支持multiple bounds的形式:

<T super A & B> //java不支持

Scala里对复合类型同样可以使用lower bound

[T >: A with B]

因为Scala里对于 A with B相当于 (A with B),仍看成一个类型,参考复合类型

本条目发布于 2013-09-08。属于 scala分类,被贴了 scalatype-system 标签。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值