在Scala中,类型参数和抽象类型可能受到类型边界的约束。这些类型边界限制了具体的类型变量,同时揭示了关于该类型成员更多的信息。一个类型上界T <: A表明了类型变量T是类型A的子类型。
这里有个例子演示了类PetContainer的类型参数的类型上界:
1 | abstract class Animal { |
1 | val lionContainer = new PetContainer[Lion](new Lion) // this would not compile |
class 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的子类型。