U Scali, tipski parametri i apstraktni tipovi mogu biti ograničeni granicom tipa.
Takve granice tipa ograničavaju konkretne vrijednosti tipskih varijabli i ponekad otkrivaju još informacija o članovima takvih tipova.
Gornja granica tipa T <: A kaže da se tipska varijabla T odnosi na podtip tipa A.
Slijedi primjer koji demonstrira gornju granicu tipa za tipski parametar klase 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
Klasa PetContainer prima tipski parametar P koji mora biti podtip od Pet.
Dog i Cat su podtipovi Pet tako da možemo kreirati novi PetContainer[Dog] i PetContainer[Cat].
Međutim, ako pokušamo kreirati PetContainer[Lion], dobićemo sljedeću grešku:
type arguments [Lion] do not conform to class PetContainer's type parameter bounds [P <: Pet]
To je zato što Lion nije podtip Pet.
Contributors to this page:
Contents
- Uvod
- Osnove
- Sjedinjeni tipovi
- Klase
- Podrazumijevane vrijednosti parametara
- Imenovani parametri
- Trejtovi
- Tuples
- Kompozicija mixin klasa
- Funkcije višeg reda
- Ugniježdene metode
- Curry-jevanje
- Case klase
- Podudaranje uzoraka (pattern matching)
- Singlton objekti
- Regularni izrazi
- Ekstraktor objekti
- For komprehensije
- Generičke klase
- Varijanse
- Gornja granica tipa
- Donja granica tipa
- Unutarnje klase
- Apstraktni tipovi
- Složeni tipovi
- Self-tipovi
- Implicitni parametri
- Implicitne konverzije
- Polimorfne metode
- Lokalno zaključivanje tipova (type inference)
- Operatori
- By-name parametri
- Anotacije
- Packages and Imports
- Package Objects