Обобщения Scala в возвращаемом значении функции

У меня есть эти классы определены.

trait ResultTrait {
}
case class PostResult (
  @Key("_id") id: String,
  success: String,
  errors: Seq[String] = Seq.empty
) extends ResultTrait

case class PostError (
  message: String,
  errorCode: String
) extends ResultTrait

Это не скомпилируется. Выдает ошибку "Обязательный T, но найден PostResult (или PostError)".

def postLead[T <: SFDCResult](accessToken: AccessToken):
        Future[T] = {
     // depends on response from request, return PostResult or PostError
}

1 ответ

Решение

Как уже сказал @Travis Brown, похоже, вы пытаетесь выразить изменчивость типа возвращаемого значения (т. Е. "Это либо PostResult или PostError") через дженерики, когда действительно все, что вам нужно, это родительская черта.

Предполагая ваш SDFCResult была ошибка анонимизации, когда вы хотели использовать ResultTraitЯ бы использовал следующее:

// Make the trait sealed so we can only have our two known implementations:
sealed trait ResultTrait {}
...
// Two subclasses as before

И тогда ваш метод должен быть просто:

def postLead(accessToken: AccessToken):Future[ResultTrait] = {
  // depends on response from request, return PostResult or PostError
}  
Другие вопросы по тегам