layout | title | partof | num | next-page | previous-page | language |
---|---|---|---|---|---|---|
tour |
Limitante Superior de Tipos |
scala-tour |
19 |
lower-type-bounds |
variances |
pt-br |
Em Scala, parâmetros de tipos e tipos abstratos podem ser restringidos por um limitante de tipo. Tal limitante de tipo limita os valores concretos de uma variável de tipo e possivelmente revela mais informações sobre os membros de determinados tipos. Um limitante superiror de tipos T <: A
declare que a variável tipo T
refere-se a um subtipo do tipo A
.
Aqui um exemplo que demonstra um limitante superior de tipo para um parâmetro de tipo da classe Cage
:
abstract class Animal {
def name: String
}
abstract class Pet extends Animal {}
class Gato extends Pet {
override def name: String = "Gato"
}
class Cachorro extends Pet {
override def name: String = "Cachorro"
}
class Leao extends Animal {
override def name: String = "Leao"
}
class Jaula[P <: Pet](p: P) {
def pet: P = p
}
object Main extends App {
var jaulaCachorro = new Jaula[Cachorro](new Cachorro)
var jaulaGato = new Jaula[Gato](new Gato)
/* Não é possível colocar Leao em Jaula pois Leao não estende Pet. */
// var jaulaLeao = new Jaula[Leao](new Leao)
}
Um instância da classe Jaula
pode conter um animal, porém com um limite superior do tipo Pet
. Um animal to tipo Leao
não é um pet, pois não estende Pet
, então não pode ser colocado em uma Jaula.
O uso de limitantes inferiores de tipo é discutido aqui.