У меня есть эта черта:Scala ковариантен типа T происходит в инвариантной позиции
trait Delivery[T] {
def form(): Form[T]
}
где Form находится в рамках PLAY2.
Тогда у меня есть объект, который реализует признак доставки:
case class NewPostValidator(town: String, number: Int)
object NewPost extends Delivery[NewPostValidator]{
def form(): Form[NewPostValidator] = Form(mapping(
"town" -> nonEmptyText,
"number" -> number)(NewPostValidator.apply)(NewPostValidator.unapply))
}
Теперь я хочу, чтобы написать функцию, которая принимает список объектов, которые реализуют черт доставку. И я не могу написать тип для параметра этого. Если я пытаюсь писать это как
list: List[Delivery[AnyRef]]
У меня ошибка несоответствия типов и если я изменю черт доставки в:
trait Delivery[+T] {
def form(): Form[T]
}
Я получил Scala типа ковариантен T происходит в инвариантной погрешности положения. Как описать тип этого параметра?
Какая точная ошибка? Как указано выше, вы можете использовать List [Delivery [_]]. Вы не должны просто бросать ковариацию, если не знаете, что это значит. – slouc
Возможный дубликат [ковариантного типа T встречается в инвариантном положении] (http://stackoverflow.com/questions/11721936/covariant-type-t-occurs-in-invariant-position) –