Scala之旅-类型上界

Scala之旅-类型上界

类型上界(Upper Type Bounds)

在Scala中,类型参数抽象类型可以通过类型范围进行限制。类型范围限制了类型变量的具体值,并且可能会透露出关于这些类型的成员的更多信息。类型上界T <: A声明了类型变量T是类型A的一个子类型。下面的例子示范了针对类的类型参数如何使用类型上界:

abstract class Animal {
 def name: String
}

abstract class Pet extends Animal {}

class Cat extends Pet {
  override def name: String = "Cat"
}

class Dog extends Pet {
  override def name: String = "Dog"
}

class Lion extends Animal {
  override def name: String = "Lion"
}

class PetContainer[P <: Pet](p: P) {
  def pet: P = p
}

val dogContainer = new PetContainer[Dog](new Dog)
val catContainer = new PetContainer[Cat](new Cat)
//  val lionContainer = new PetContainer[Lion](new Lion)
//                         ^this would not compile

类PetContainer的类型参数P必须是Pet的子类型。Dog和Cat都是Pet的子类型,所以我们可以创建PetContainer[Dog]和PetContainer[Cat]。然而,如果我们尝试创建PetContainer[Lion],则就会得到如下错误:

type arguments [Lion] do not conform to class PetContainer’s type parameter bounds [P <: Pet]

这是因为Lion不是Pet的子类型。

参考资料

本文译自Tour Of Scala – Upper Type Bounds

上一篇:Scala之旅-变性

下一篇:Scala之旅-类型下界

发表评论

电子邮件地址不会被公开。 必填项已用*标注