关闭

scala类型限定

标签: scalatype-boundimmutable
407人阅读 评论(0) 收藏 举报
分类:

scala类型限定

以类型下界限定举例,S>:T意味着:

如果传入一个参数S,其类型与T相同,或者是T的父类型,那么将会使用类型S。如果传入一个类型T的子类型,那么将会使用类型T。

下面以代码来说明类型下界限定。
首先定义一个链表类:

case class ListNode[+T](h: T, t: ListNode[T]) {
        def head: T = h
        def tail: ListNode[T] = t
        //  以T为类型下界,返回类型为U,U为T的父类或者与T相同
        def prepend[U >: T](elem: U): ListNode[U] =
             ListNode(elem, this)
}

接下来定义几个具有继承关系的类型:

class Animal
class Canine extends Animal
class Dog extends Canine

下面来测试类型下界限定:

object LowerBoundTest {

  def main(args: Array[String]): Unit = {

    // v1, v2, v3, v4皆为immutable 变量    
    val empty: ListNode[Null] = ListNode(null, null)
    val v1 = empty.prepend(new Canine).prepend(new Canine) // ListNode[Canine]
    val v2 = v1.prepend(new Animal) //  ListNode[Animal]
    val v3 = v1.prepend(new Canine) //  ListNode[Canine]
    val v4 = v1.prepend(new Dog)  //  ListNode[Canine]

  }

}

参考:http://stackoverflow.com/questions/19428376/scala-covariance-and-lower-type-bounds-explanation

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:58524次
    • 积分:971
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:17篇
    • 译文:1篇
    • 评论:29条
    最新评论