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