Por que o exemplo não é compilado, também conhecido como (co-, contra- e in) variação?
Seguindo emessa questão, alguém pode explicar o seguinte em Scala:
class Slot[+T] (var some: T) {
// DOES NOT COMPILE
// "COVARIANT parameter in CONTRAVARIANT position"
}
Eu entendo a distinção entre+T
eT
na declaração de tipo (ele compila se eu usarT
) Mas como escrever uma classe que é covariante em seu parâmetro de tipo sem recorrer à criação da coisanão parametrizado? Como posso garantir que o seguinte possa ser criado apenas com uma instância deT
?
class Slot[+T] (var some: Object){
def get() = { some.asInstanceOf[T] }
}
EDITAR - agora temos o seguinte:
abstract class _Slot[+T, V <: T] (var some: V) {
def getT() = { some }
}
isso é tudo de bom, mas agora tenho dois parâmetros de tipo, onde quero apenas um. Vou re-perguntar a pergunta assim:
Como posso escrever umaimutável Slot
classe que écovariante em seu tipo?
EDIT 2: Duh! eu useivar
e nãoval
. A seguir, é o que eu queria:
class Slot[+T] (val some: T) {
}