Tour of Scala

Górne ograniczenia typów

Language

W Scali parametry typów oraz typy abstrakcyjne mogą być warunkowane przez ograniczenia typów. Tego rodzaju ograniczenia pomagają określić konkretne wartości zmiennych typu oraz odkryć więcej informacji na temat elementów tych typów. Ograniczenie górne typu T <: A zakładają, że zmienna T jest podtypem typu A.

Poniższy przykład demonstruje zastosowanie ograniczeń górnych typu dla parametru typu klasy Cage:

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 Cage[P <: Pet](p: P) {
  def pet: P = p
}

object Main extends App {
  var dogCage = new Cage[Dog](new Dog)
  var catCage = new Cage[Cat](new Cat)
  /* Nie można włożyć Lion do Cage, jako że Lion nie jest typu Pet. */
//  var lionCage = new Cage[Lion](new Lion)
}

Instancja klasy Cage może zawierać Animal z górnym ograniczeniem Pet. Obiekt typu Lion nie należy do klasy Pet, zatem nie może być włożony do obiektu Cage.

Zastosowanie dolnych ograniczeń typów jest opisane tutaj.