Почему параметр находится в контравариантном положении?

Я пытаюсь использовать параметр ковариантного типа внутри трейта для создания case-класса следующим образом:

trait MyTrait[+T] {
  private case class MyClass(c: T)
}

компилятор говорит:

error: covariant type T occurs in contravariant position in type T of value c

Затем я попытался следующее, но это также не сработало:

trait MyTrait[+T] {
  private case class MyClass[U <: T](c: U)
}

ошибка на этот раз:

error: covariant type T occurs in contravariant position in type >: Nothing <: T of type U

Может ли кто-нибудь объяснить, почему T находится здесь в ковариантной позиции, и предложить решение этой проблемы? Спасибо!

31
задан lapislazuli 8 March 2012 в 14:22
поделиться