类型上界

在 Scala 中,类型参数抽象类型可能受到类型边界的约束。这些类型边界限制了具体的类型变量,同时揭示了关于该类型成员更多的信息。一个类型上界 T <: A 表明了类型变量 T 是类型 A 的子类型。

这里有个例子演示了类 PetContainer 的类型参数的类型上界:

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

class PetContainer 接受一个类型参数 P ,它是 Pet 的子类型。 DogCatPet 的子类型,因此我们可以创建一个新的 PetContainer[Dog]PetContainer[Cat] 。然而,如果我们试图创建一个 PetContainer[Lion] ,则会得到下面的错误:

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

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

知识共享许可协议 BY 小鹏            此页面修订于 2019-07-17 14:13:42

results matching ""

    No results matching ""