Почему пример не компилируется, иначе как (со-, противо- и не-) дисперсия работает?

Исходя изэтот вопросМожет кто-нибудь объяснить следующее в Scala:

class Slot[+T] (var some: T) { 
   //  DOES NOT COMPILE 
   //  "COVARIANT parameter in CONTRAVARIANT position"

}

Я понимаю разницу между+T а такжеT в объявлении типа (он компилируется, если я используюT). Но тогда как на самом деле написать класс, который является ковариантным по своему параметру типа, не прибегая к созданию вещи?unparametrized? Как я могу гарантировать, что следующее может быть создано только с экземпляромT?

class Slot[+T] (var some: Object){    
  def get() = { some.asInstanceOf[T] }
}

РЕДАКТИРОВАТЬ - теперь получил это до следующего:

abstract class _Slot[+T, V <: T] (var some: V) {
    def getT() = { some }
}

это все хорошо, но теперь у меня есть два параметра типа, где я хочу только один. Я снова задам вопрос так:

Как я могу написатьнеизменный Slot класс, которыйковариант в своем роде?

РЕДАКТИРОВАТЬ 2: Дух! я использовалvar и неval, Вот что я хотел:

class Slot[+T] (val some: T) { 
}

Ответы на вопрос(2)

Ваш ответ на вопрос