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