Não é possível substituir um tipo com limite superior não volátil
Eu tenho um erro de compilador em scala e não sei a que se refere:
Assuma estas declarações:
trait Abstract {
type MyType
}
trait AInner
trait A extends Abstract{
type MyType <: AInner
}
trait BInner {
def bMethod : Int
}
trait B extends Abstract with A{
override type MyType <: BInner with A#MyType
}
O que estou tentando alcançar aqui (em traçoB
) é restringir ainda mais o tipoMyType
declarado emAbstract
, então qualquer valor do tipoMyType
deve estender todo oMyType
s na árvore mixin.O compilador está me dando essa mensagem (como no título):tipo MyType é um tipo volátil; não pode anular um tipo com limite superior não volátil. Eu entendi aquilotipo volatilidade está acontecendo aqui por causa da conjunção tipowith A#MyType
, a parte do erro:digite com limite superior não volátil provavelmente se refere à declaração de tipotype MyType <: AInner
, OndeAInner
não é um tipo abstrato, portanto, não volátil.