Scala - Общий тип не проверяет тип - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь понять свою ошибку в реализации дженериков.У меня есть черта, которая определяет метод, который возвращает ссылку с верхней границей типа черты.Как бы то ни было, ссылка на var на реализацию признака не может проверить тип с помощью Expression of type Capability[Class] doesn't conform to expected type Capability[Trait]

Вот код:

trait IAITask {
  def taskTypeReference[T >: IAITask]: Capability[T]
}

object Tasks {
   var Walk: Capability[Walk] = _
}

class Walk extends IAITask {
  override def taskTypeReference[T >: IAITask]: Capability[IAITask] = Tasks.Walk //This line does not type check
}

1 Ответ

0 голосов
/ 02 февраля 2019

Если это интерфейс Java, то вы можете попытаться имитировать дисперсию сайта использования Java с помощью подстановочных знаков:

trait Capability[A]

trait IAITask {
  def taskTypeReference: Capability[_ <: IAITask]
}

object Tasks {
   var Walk: Capability[Walk] = _
}

class Walk extends IAITask {
  override def taskTypeReference: Capability[_ <: IAITask] = Tasks.Walk
}
...