Обобщения 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
}